1. 引言
朴素贝叶斯模型是基于贝叶斯定理与特征条件独立假设的分类方法,它基于特征条件独立假设学习输入和输出的联合概率分布,然后采用贝叶斯定理求出后验概率最大的类别作为预测实例的类别,是属于生成模型中的一种方法。
2. 朴素贝叶斯模型介绍
2.1 朴素贝叶斯模型介绍
对于输入空间
X
⊆
R
n
\mathcal{X} \subseteq \mathbf{R}^{n}
X⊆Rn为
n
n
n维向量空间,输出空间
Y
=
{
c
1
,
c
2
,
⋯
 
,
c
K
}
\mathcal{Y}=\{c_{1}, c_{2}, \cdots, c_{K} \}
Y={c1,c2,⋯,cK}为类标记集合。
x
∈
X
x \in \mathcal{X}
x∈X为输入特征向量,
y
∈
Y
y \in \mathcal{Y}
y∈Y为输出类标记,则训练集可以表示为:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
 
,
(
x
N
,
y
N
)
}
T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)} 其中,
N
N
N表示训练集的大小。
朴素贝叶斯通过训练数据集学习
X
X
X和
Y
Y
Y的联合概率分布
P
(
X
,
Y
)
P(X, Y)
P(X,Y),由条件概率公式我们知道:
P
(
X
,
Y
)
=
P
(
Y
)
×
P
(
X
∣
Y
)
P(X, Y) = P(Y) \times P\left(X | Y\right)
P(X,Y)=P(Y)×P(X∣Y)因此,朴素贝叶斯模型实际是将学习联合概率分布
P
(
X
,
Y
)
P(X, Y)
P(X,Y)转化为学习先验概率分布
P
(
Y
)
P(Y)
P(Y)和条件概率分布
P
(
X
∣
Y
)
P\left(X | Y\right)
P(X∣Y),具体的公式表达如下:
- 先验概率分布:
P ( Y = c k ) , k = 1 , 2 , ⋯   , K P\left(Y=c_{k}\right), \quad k=1,2, \cdots, K P(Y=ck),k=1,2,⋯,K - 条件概率分布:
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K P\left(X=x | Y=c_{k}\right)=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right), \quad k=1,2, \cdots, K P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck),k=1,2,⋯,K
为了简化条件概率分布的计算,朴素贝叶斯对其做了条件独立性的假设,这也是“朴素”二字的由来。有了条件独立性的假设后,条件概率分布可以表达为:
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
⋯
 
,
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
\begin{aligned} P\left(X=x | Y=c_{k}\right) &=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right) \\ &=\prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) \end{aligned}
P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)这样一来,我们可以根据贝叶斯定理,对给定的输入
x
x
x,得到后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P\left(Y=c_{k} | X=x\right)
P(Y=ck∣X=x):
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
k
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
P\left(Y=c_{k} | X=x\right)=\frac{P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)}{\sum_{k} P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)}
P(Y=ck∣X=x)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)将条件概率分布代入上式可得:
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
,
k
=
1
,
2
,
⋯
 
,
K
P\left(Y=c_{k} | X=x\right)=\frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}, \quad k=1,2, \cdots, K
P(Y=ck∣X=x)=∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck),k=1,2,⋯,K因此,最终从计算得到的后验概率分布中选择概率最大的类别作为输入
x
x
x的预测类别,即:
y
=
f
(
x
)
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=f(x)=\arg \max _{c_{k}} \frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}
y=f(x)=argckmax∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)由于对于每一个给定的输入
x
x
x,我们知道上式的分母对于每一个类别
c
k
c_{k}
ck其实都是一样的,因此,我们只需要计算分子即可,所以上式可以进一步简化为:
y
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=\arg \max _{c_{k}} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)
y=argckmaxP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
2.2 朴素贝叶斯的参数估计
当特征空间都是离散分布时,朴素贝叶斯的参数估计一般有两种方法,即极大似然估计和贝叶斯估计。对于给定的训练集 T T T,假设对于第 j j j个特征,其取值的集合为 x i ( j ) ∈ { a j j , a j 2 , ⋯   , a j s j } x_{i}^{(j)} \in\left\{a_{j j}, a_{j 2}, \cdots, a_{j s_{j}}\right\} xi(j)∈{ajj,aj2,⋯,ajsj},其中 a j l a_{j l} ajl表示第 j j j个特征可能取的第 l l l个值, j = 1 , 2 , ⋯   , n , l = 1 , 2 , ⋯   , S j j=1,2, \cdots, n, \quad l=1,2, \cdots, S_{j} j=1,2,⋯,n,l=1,2,⋯,Sj,则两种估计方法计算先验概率和条件概率的方式分别如下:
- 极大似然估计:
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , ⋯   , K P\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)}{N}, \quad k=1,2, \cdots, K P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,⋯,K
P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k ) P\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{jl}, y_{i}=c_{k}\right)}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)} P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)
j = 1 , 2 , ⋯   , n ; l = 1 , 2 , ⋯   , S j ; k = 1 , 2 , ⋯   , K j=1,2, \cdots, n ; \quad l=1,2, \cdots, S_{j} ; \quad k=1,2, \cdots, K j=1,2,⋯,n;l=1,2,⋯,Sj;k=1,2,⋯,K - 贝叶斯估计:由于极大似然估计会出现概率为0的情况,会容易导致计算产生较大的误差,因此,贝叶斯估计则在极大似然估计的基础上采用平滑技术,对分子分母分别引入一项非负常数,从而使得概率不会出现0的情况,其计算公式如下:
P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ P_{\lambda}\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{j l}, y_{i}=c_{k}\right)+\lambda}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+S_{j} \lambda} Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P_{\lambda}\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+\lambda}{N+K \lambda} Pλ(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ
j = 1 , 2 , ⋯   , n ; l = 1 , 2 , ⋯   , S j ; k = 1 , 2 , ⋯   , K ; λ > 0 j=1,2, \cdots, n ; \quad l=1,2, \cdots, S_{j} ; \quad k=1,2, \cdots, K ; \quad \lambda>0 j=1,2,⋯,n;l=1,2,⋯,Sj;k=1,2,⋯,K;λ>0 λ \lambda λ的取值常取为1,此时也称为拉普拉斯平滑(Laplace smoothing)。
当特征空间含有连续型特征时,则此时对于这些特征的估计需要引入连续型概率分布来进行拟合,一般会对每个类别下的特征采用高斯分布等进行概率估计:
P
(
x
i
(
j
)
∣
Y
=
c
k
)
=
1
2
π
σ
y
c
k
2
exp
(
−
(
x
i
(
j
)
−
μ
y
c
k
)
2
2
σ
y
c
k
2
)
P\left(x^{(j)}_{i} |Y=c_{k}\right)=\frac{1}{\sqrt{2 \pi \sigma_{y _{ck}}^{2}}} \exp \left(-\frac{\left(x^{(j)}_{i} -\mu_{y_{ck}}\right)^{2}}{2 \sigma_{y_{ck}}^{2}}\right)
P(xi(j)∣Y=ck)=2πσyck21exp⎝⎜⎛−2σyck2(xi(j)−μyck)2⎠⎟⎞其中,
μ
y
c
k
\mu_{y_{c k}}
μyck表示类别
c
k
c_k
ck下,特征
X
(
j
)
X^{(j)}
X(j)的均值,
σ
y
c
k
2
\sigma_{y_{c k}}^{2}
σyck2表示类别
c
k
c_k
ck下,特征
X
(
j
)
X^{(j)}
X(j)的方差。
3. 朴素贝叶斯模型的python实现
sklearn已经支持朴素贝叶斯模型,需要注意的是,当特征中全是连续型变量时,则需要采用GaussianNB作为分类器,当特征全是离散型变量时,则采用MultinomialNB作为分类器,其中alpha参数就相当于本文提到的贝叶斯估计的 λ \lambda λ平滑项。具体的代码实现可以参见本人的github项目:
4. 总结
朴素贝叶斯模型的原理其实挺简单的,其应用以前主要是在一些文本分类任务,比如垃圾邮件分类,但是,由于朴素贝叶斯模型假设特征之间是条件独立的,因此,这个假设在现实生活中是很难完全达到的,特别是在文本任务中,词汇之间常常有序列相关关系,因此,此时如果使用朴素贝叶斯方法可能效果并不一定好。