一、概念
朴素贝叶斯是应用贝叶斯定理进行有监督学习的一种分类模型。在该模型中,将贝叶斯定理公式 P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A | B) = \frac{P(A) P(B|A)}{P(B)}P (A ∣B )=P (B )P (A )P (B ∣A ) 中的事件 A A A 看成分类标签,事件 B B B 看出数据特征,由于通常数据特征是 n n n 维向量,所以 P ( B ) P(B)P (B ) 演变成了 n n n 个特征的联合概率。在机器学习语境下,贝叶斯公式变成了:
P ( y ∣ x 1 , x 2 , … , x n ) = P ( y ) P ( x 1 , x 2 , … , x n ∣ y ) P ( x 1 , x 2 , … , x n ) (1) P(y|x_1,x_2,\dots,x_n) = \frac{P(y)P(x_1,x_2,\dots,x_n|y)}{P(x_1,x_2,\dots,x_n)} \tag{1}P (y ∣x 1 ,x 2 ,…,x n )=P (x 1 ,x 2 ,…,x n )P (y )P (x 1 ,x 2 ,…,x n ∣y )(1 )
P ( y ) P(y)P (y ) :表示假设 y y y 的先验概率(由以往的数据分析得到的概率叫先验概率)
P ( X ) P(X)P (X ):表示样本数据 X X X 的先验概率,得到信息之后再重新得到的概率叫后验概率
P ( y ∣ X ) P(y|X)P (y ∣X ):表示在条件 X X X 下,假设 y y y 的后验概率
P ( X ∣ y ) P(X|y)P (X ∣y ):表示在给定假设 H H H 的前提下,样本 X X X 的后验概率
二、贝叶斯分类方法
朴素贝叶斯分类方法 ( N a i v e B a y e s ) (Naive \; Bayes)(N a i v e B a y e s ) 是利用贝叶斯定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。利用贝叶斯公式对样本进行分类的伪代码如下:
由于实际上计算了所有标签的后验概率,所以贝叶斯分类不仅可以提供该组特征最可能的标签,还能给出第 2 、 3 、 4 、 … 2、3、4、\dots 2 、3 、4 、… 高可能性的标签。做出诸如 “是苹果的可能性为 50 % 50 \%5 0 %,橘子的可能性为 20 % … 20\% \dots 2 0 %… “,这样的预测形式。这时梯度下降、S V M SVM S V M 等分类器做不到的,在某些应用场景中很有吸引力。
另外,由于对单条样本来说在计算所有标签的后验概率时公式中的 P ( x 1 , x 2 , … , x n ) P(x_1,x_2,\dots,x_n)P (x 1 ,x 2 ,…,x n ) 保持不变,所以出于性能考虑在实践中无需将该标准化常量加入训练与预测的计算中。
对于训练来说关注的是贝叶斯公式中右侧的先验概率,似然度。
先验概率:可以由训练者根据经验直接给出,也可以自动计算:统计训练数据中每个标签的出现次数,除以训练总数就可以得到每个标签的先验概率。
似然度:假定 n n n 维特征的条件概率符合某种联合分布,根据训练样本估计该分布的参数。比如对于高斯分布来说,学习的参数有期望值和方差。
在如上所述训练与预测的原理中,难点最终归结为计算 n n n 维特征的联合分布,在此处朴素贝叶斯模型有一个约定,那就是假设所有 n n n 维特征之间是相互独立的。这大大简化了联合分布的计算难度,由此事件独立性的充分必要条件有:
P ( X ) = ∏ i n P ( x i ) X = { x 1 , x 2 , … , x n } (2) P(X) = \prod^n_i P(x_i) \ X = {x_1,x_2,\dots,x_n} \tag{2}P (X )=i ∏n P (x i )X ={x 1 ,x 2 ,…,x n }(2 )
假定有 m m m 个类 C 1 , C 2 , … , C m C_1,C_2,\dots,C_m C 1 ,C 2 ,…,C m ,给定一个未知的数据样本 X X X,分类器将预测 X X X属于具有最高后验概率的类,也就是说朴素贝叶斯分类将未知的样本分配给 类C i C_i C i 且仅当 P ( C i ∣ X ) > P ( C j ∣ X ) P(C_i |X) > P(C_j|X)P (C i ∣X )>P (C j ∣X ) ,对于任意的 j = 1 , 2 , … , m j=1,2,\dots,m j =1 ,2 ,…,m,且 j ≠ i j \neq i j =i。最大化 P ( C i ∣ X ) P(C_i|X)P (C i ∣X ),其 P ( C I ∣ X ) P(C_I|X)P (C I ∣X ) 最大的类 C i C_i C i 称为最大后验假定。
P ( C i ∣ X ) = P ( X ∣ C i ) P ( C i ) P ( X ) (3) P(C_i|X) = \frac{P(X|C_i)P(C_i)}{P(X)} \tag{3}P (C i ∣X )=P (X )P (X ∣C i )P (C i )(3 )
由于 P ( X ) P(X)P (X ) 于所有类为常数,只需要 P ( X ∣ C i ) ∗ P ( C i ) P(X|C_i) * P(C_i)P (X ∣C i )∗P (C i ) 最大即可,
如果 C i C_i C i 类的先验概率未知,则通常假定这些类是等概率的,即P ( C 1 ) = P ( C 2 ) = … = P ( C m ) P(C_1)= P(C_2)=…= P(C_m)P (C 1 )=P (C 2 )=…=P (C m ),因此问题就转换为对 P ( X ∣ C i ) P(X | C_i)P (X ∣C i ) 的最大化 P ( X ∣ C i ) P(X | C_i)P (X ∣C i ) 常被称为给定 C i C_i C i 时数据 X X X 的似然度,而使 P ( X ∣ C i ) P(X | C_i)P (X ∣C i ) 最大的假设 C i C_i C i 称为最大似然假设)。
否则,需要最大化 P ( X ∣ C i ) ∗ P ( C i ) P(X | C_i)* P(Ci)P (X ∣C i )∗P (C i )。注意, 类的先验概率可以用P ( C i ) = S i / S P (C_i)= S_i/ S P (C i )=S i /S 计算,其中 S i S_i S i 是类 C i C_i C i 中的训练样本数,而 S S S 是训练样本总数。
给定具有许多属性的数据集,计算 P ( X ∣ C i ) P(X|C_i)P (X ∣C i ) 的开销可能非常大,为降低计算 P ( X ∣ C i ) P(X|C_i)P (X ∣C i )的开销,可以做类条件独立的 朴素假定。
P ( A B ) = P ( A ) P ( B ) (4) P(AB) = P(A)P(B) \tag{4}P (A B )=P (A )P (B )(4 )
给定样本的类标号,假定属性值相互条件独立,即在属性间不存在依赖关系,这样可以得到联合分布概率(似然度函数):
P ( X ∣ C i ) = ∏ k = 1 n P ( X k ∣ C i ) (5) P(X |C_i) = \prod^n_{k=1}P(X_k|C_i) \tag{5}P (X ∣C i )=k =1 ∏n P (X k ∣C i )(5 )
对未知的样本 X X X 分类,就是对每个类 C C C,计算 P ( X ∣ C i ) ∗ P ( C i ) P(X|C_i) * P(C_i)P (X ∣C i )∗P (C i )
样本 X X X 被指派到类 C i C_i C i ,当且仅当 P ( C i ∣ X ) > P ( C j ∣ X ) , 1 ≤ j ≤ m , j ≠ i P(C_i|X)>P(C_j|X),1\le j\le m,j \neq i P (C i ∣X )>P (C j ∣X ),1 ≤j ≤m ,j =i ,换言之, X X X 被指派到其 P ( X ∣ C i ) ∗ P ( C i ) P(X | C_i) * P(C_i)P (X ∣C i )∗P (C i ) 最大的类。
这意味着可以将目标从计算联合分布的条件概率简化成为计算各特征独立的条件概率,这也是模型名称中”朴素”的由来。
朴素贝叶斯分类算法的优点在于:
- 容易实现;
- 对小规模的数据表现好;
- 对缺失数据不太敏感。
缺点:
- 算法成立的前提是假设各属性之间互相独立。当数据集满足这种独立性假设时,分类准确度较高。而实际领域中,数据集可能并不完全满足独立性假设。
- 需要计算先验概率。
朴素贝叶斯是一种高偏差低方差的算法。而如果训练集很小,高偏差/低方差的分类器(如朴素贝叶斯)比低偏差/高方差的分类器更有优势,因为后者容易过拟合。
但是随着训练集的增大,高偏差的分类器并不能训练处准确的模型,所以低偏差/高方差的分类器会胜出。
在统计学习框架下,大家刻画模型复杂度的时候,有这么个观点,认为 E r r o r = B i a s + V a r i a n c e Error = Bias + Variance E r r o r =B i a s +V a r i a n c e。这里的 E r r o r Error E r r o r 大概可以理解为模型的预测错误率,是有两部分组成的,一部分是由于模型太简单而带来的估计不准确的部分(B i a s Bias B i a s),另一部分是由于模型太复杂而带来的更大的变化空间和不确定性(V a r i a n c e Variance V a r i a n c e)。
所以,这样就容易分析朴素贝叶斯了。它简单的假设了各个数据之间是无关的,是一个被严重简化了的模型。所以,对于这样一个简单模型,大部分场合都会 B i a s Bias B i a s 部分大于 V a r i a n c e Variance V a r i a n c e 部分,也就是说高偏差而低方差。
三、高斯朴素贝叶斯
训练似然度条件概率中的元素 P ( x 1 ∣ y ) , P ( x 2 ∣ y ) … P(x_1 | y), P(x_2 | y) \dots P (x 1 ∣y ),P (x 2 ∣y )… 的方法是假定特征符合某种分布,然后通过训练集数据估计该分布的参数。 sklearn
在 naive_bayes
包中根据假定的特征分布类型不同分别实现了三种模型,高斯朴素贝叶斯( G a u s s i a n N a i v e B a y e s ) (Gaussian \; Naive \; Bayes)(G a u s s i a n N a i v e B a y e s ) 包含在其中。
高斯朴素贝叶斯使用的高斯分布就是常数的正态分布,假定所有的特征条件分布符合:
P ( x i ∣ y ) = 1 2 π σ y 2 exp ( − ( x i − μ y ) 2 2 σ y 2 ) (6) P(x_i |y) = \frac{1}{\sqrt{2\pi \sigma_y^2}} \exp(-\frac{(x_i – \mu_y)2}{2\sigma^2_y}) \tag{6}P (x i ∣y )=2 πσy 2 1 exp (−2 σy 2 (x i −μy )2 )(6 )
其中 μ y \mu_y μy 、σ y 2 \sigma_y^2 σy 2 是被学习的模型参数特征期望值与方差。
以鸢尾花分类为例:
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
iris = load_iris()
gnb = GaussianNB()
gnb.fit(iris.data, iris.target)
gnb.class_prior_
0.333333
0.333333
0.333333
gnb.class_count_
50.0
50.0
50.0
gnb.theta_
5.006, 3.428, 1.462, 0.246
5.936, 2.770, 4.260, 1.326
6.588, 2.974, 5.552, 2.026
查看高斯模型方差 σ y 2 \sigma_y^2 σy 2
gnb.sigma_
0.121764, 0.140816, 0.029556, 0.010884
0.261104, 0.096500, 0.216400, 0.038324
0.396256, 0.101924, 0.298496, 0.073924
四、多项式朴素贝叶斯
多项式朴素贝叶斯 ( M u l t i n o m i a l N a i v e B a y e s ) (Multinomial \; Naive \; Bayes)(M u l t i n o m i a l N a i v e B a y e s ) 是用多项分布 ( M u l t i n o m i a l D i s t r i b u t i o n ) (Multinomial \;Distribution)(M u l t i n o m i a l D i s t r i b u t i o n ) 作为似然度概率模型的分类器。由于其实际衡量的是特征在不同标签之间的分布比例关系,所以比较适合文本分类场景。
多项分布的概念在此不做过多解释,设训练集中有 m m m 种分类标签,多项式朴素贝叶斯假定每个特征都符合参数是向量 < θ y 1 , θ y 2 , … , θ y m > <θy 1 ,θy 2 ,…,θy m > 的多项分布,向量中的每个值是:
θ y i = N y i + α N y + α ⋅ M (7) \theta_{yi} = \frac{N_{yi} + \alpha}{N_y + \alpha \cdot M} \tag{7}θy i =N y +α⋅M N y i +α(7 )
其中 N y i N_{yi}N y i 是特征 i i i 在当前标签中的总数,N y N_y N y 是当前标签所有特征的总数,超参数 α \alpha α 是平滑先验,其目的是防止 N y i N_{yi}N y i 为零从而导致 θ y i \theta_{yi}θy i 也为零的情况发生。α \alpha α 通常设为1,也就是拉普拉斯平滑 ( L a p l a c e S m o o t h i n g ) (Laplace \; Smoothing)(L a p l a c e S m o o t h i n g )。
sklearn
中实现多项式贝叶斯的类是 MultinomialNB
,与 GaussianNB
不同的是在模型初始化中多了参数 α \alpha α,并且训练后模型不再提供高斯特有的 theta_
、 sigma_
属性。
五、伯努利朴素贝叶斯
伯努利朴素贝叶斯 ( B e r n o u l l i N a i v e B a y e s ) (Bernoulli \; Naive \; Bayes)(B e r n o u l l i N a i v e B a y e s ) 使用伯努利分布 ( B e r n o u l l i D i s t r i b u t i o n ) (Bernoulli \; Distribution)(B e r n o u l l i D i s t r i b u t i o n ) 作为似然度概率模型。所谓伯努利分布也称二值分布,用来描述一次实验只可能出现两种结果的事件概率分布。由于伯努利分布只能描述二值结果,因而在学习该模型中要求数据中的所有特征都是 布尔 / 二值
类型。
sklearn
中实现伯努利朴素贝叶斯模型的类是 BernoulliNB
,它用如下公式计算第 i
个特征的似然度:
P ( x i ∣ y ) = P ( i ∣ y ) x i + ( 1 − P ( i ∣ y ) ) ( 1 − x i ) (8) P(x_i | y) = P(i | y)x_i + (1 – P(i | y))(1 – x_i) \tag{8}P (x i ∣y )=P (i ∣y )x i +(1 −P (i ∣y ))(1 −x i )(8 )
其中 P ( i ∣ y ) P(i | y)P (i ∣y ) 是第 i i i 个特征在所有该标签训练数据中出现的比。
在调用方式上, BernoulliNB
多了一个 binarize
参数,参数 binarize
被用来当作一个阈值,将非二值特征转化为二值:
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB(binarize=1)
X = [[0.3, 0.2], [1.3, 1.2], [1.1, 1.2]]
y = [0, 1, 2]
clf.fit(X, y)
clf.predict([[0.3, 0.2], [1.3, 1.2], [1.1, 1.2], [0.99, 0.99]])
0
1
1
0
因为阈值为1,所以特征 [ 0.99 , 0.99 ] [0.99, 0.99][0 .9 9 ,0 .9 9 ] 被认为是0类标签,而不是与其更近的 [ 1.1 , 1.2 ] [1.1, 1.2][1 .1 ,1 .2 ] 为同类标签。
Original: https://blog.csdn.net/XuJiuInChina/article/details/122062238
Author: 许久是混子
Title: 4. 朴素贝叶斯
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/664961/
转载文章受原作者版权保护。转载请注明原作者出处!