朴素贝叶斯
丹丹

特性

  • 基于概率,优点是可以对预测标签给出理论上完美的可能性估计
  • 要求数据多维特征之间相互独立,因此在计算n维特征的联合分布时,才能简化成各自先验机率相乘

原理

朴素贝叶斯是应用贝叶斯定理进行有监督学习的一种分类模型。在模型中,将贝叶斯定理公式 中的事件A看成被分类标签,事件B看成数据特征。伪代码如下:

for label in 所有标签:

用贝叶斯公式计算在给定特征情况下出现该label的后验机率

预测标签 <= 获得最高后验机率的 label

由于实际上计算了所有标签的后验机率,所以贝叶斯分类不仅可以提供该组特征最可能的标签,还能给出其他的标签排序。

高斯朴素贝叶斯

  • 假定所有特征都呈高斯分布
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from sklearn import datasets
iris = datasets.load_iris()

from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(iris.data, iris.target)

print("数据集大小")
print(iris.data.shape)
print(iris.target.shape)
print("")

print("察看模型的先验机率")
print(gnb.class_prior_)
print("")

print("察看训练集标签数量")
print(gnb.class_count_)
print("")

print("察看高斯模型期望值")
print(gnb.theta_)
print("")

print("察看高斯模型方差")
print(gnb.sigma_)
数据集大小
(150, 4)
(150,)

察看模型的先验机率
[0.33333333 0.33333333 0.33333333]

察看训练集标签数量
[50. 50. 50.]

察看高斯模型期望值
[[5.006 3.428 1.462 0.246]
 [5.936 2.77  4.26  1.326]
 [6.588 2.974 5.552 2.026]]

察看高斯模型方差
[[0.121764 0.140816 0.029556 0.010884]
 [0.261104 0.0965   0.2164   0.038324]
 [0.396256 0.101924 0.298496 0.073924]]

伯努利朴素贝叶斯

  • 每次实验只可能出现两种结果的事件概率分布,也称二值分布
1
2
3
4
5
6
7
8
9
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB(binarize = 1)

# 可以输入非二值特征,BernoulliNB内部会用阈值1将其转换为二值
X = [[0.3, 0.2], [1.3, 1.2], [1.1, 1.2]]
Y = [0, 1, 1]
clf.fit(X, Y)

clf.predict([[0.99, 0.99]])
array([0])

参考:

  1. 从机器学习到深度学习:基于Scikit-learn与TensorFlow的高效开发实战