day06——朴素贝叶斯算法

朴素贝叶斯算法

  • 一、什么是朴素贝叶斯分类方法
  • 二、概率基础知识
    • 1,联合概率
    • 2,条件概率
  • 三、贝叶斯公式
    • 1,公式
    • 2,拉普拉斯平滑系数
  • 四、API
  • 五、实操
    • 案例:20类新闻分类
    • 代码
  • 六、总结

一、什么是朴素贝叶斯分类方法

朴素贝叶斯分类方法是一种基于贝叶斯定理的统计学习分类算法。它假设所有特征之间相互独立,且每个特征对于类别的影响是等价的,因此被称为“朴素”。该方法通过先验概率和观测数据的条件概率来计算后验概率,然后将待分类样本分配到具有最大后验概率的类别中。在文本分类、垃圾邮件过滤、情感分析等领域具有广泛应用。

举例:根据以下数据,此时如果一个男生向女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
day06——朴素贝叶斯算法_第1张图片

二、概率基础知识

1,联合概率

包含多个条件,且所有条件同时成立的概率
记作:P(A,B)
特性:P(A, B) = P(A)P(B)

2,条件概率

事件A在另外一个事件B已经发生条件下的发生概率
记作:P(A|B)
特性:P(A1,A2|B) = P(A1|B)P(A2|B)
注意:此条件概率的成立,是由于A1,A2相互独立的结果(记忆)

三、贝叶斯公式

1,公式

day06——朴素贝叶斯算法_第2张图片
例如文章分类计算
day06——朴素贝叶斯算法_第3张图片
代入公式:

# 由于分母 P(W) 相同,所以直接比较分子
科技:
P(科技|影院,支付宝,云计算)
= (影院,支付宝,云计算|科技)∗P(科技)
= (8/100)(20/100)(63/100)(30/90)
= 0.00456109

娱乐:
P(娱乐|影院,支付宝,云计算)
= (影院,支付宝,云计算|娱乐)∗P(娱乐)
= (56/121)(15/121)(0/121)(60/90)
= 0

是否为娱乐类别的计算概率为0,这显然不合适,所以用拉普拉斯平滑系数来防止计算概率为0

2,拉普拉斯平滑系数

day06——朴素贝叶斯算法_第4张图片
此时我们再计算上述的文章类别

P(娱乐|影院,支付宝,云计算) 
= P(影院,支付宝,云计算|娱乐)P(娱乐)
= P(影院|娱乐)*P(支付宝|娱乐)*P(云计算|娱乐)P(娱乐)
= (56+1/121+4)(15+1/121+4)(0+1/121+1*4)(60/90) = 0.00002

四、API

# alpha:拉普拉斯平滑系数
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)

五、实操

案例:20类新闻分类

数据来源于 sklearn,大约有 20000 个新闻组文档,通过 sklearn.datasets.fetch_20newsgroups(subset='all') 来获取。

步骤:

  • 获取数据
  • 分割数据集
  • tfidf进行特征抽取
  • 朴素贝叶斯预测

代码

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB

news = fetch_20newsgroups(subset='all')

x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.3)

# 对于文本数据,进行特征抽取
tf = TfidfVectorizer()
x_train = tf.fit_transform(x_train)
# 不能调用fit_transform
x_test = tf.transform(x_test)

# estimator估计器流程
mlb = MultinomialNB(alpha=1.0)
mlb.fit(x_train, y_train)

# 进行预测
y_predict = mlb.predict(x_test)
print("预测每篇文章的类别:", y_predict[:100])
print("真实类别为:", y_test[:100])
print("预测准确率为:", mlb.score(x_test, y_test))

六、总结

优点:

  • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
  • 分类准确度高,速度快

缺点:

  • 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好

你可能感兴趣的:(机器学习,机器学习)