朴素贝叶斯模型介绍与python实现

1. 引言

    朴素贝叶斯模型是基于贝叶斯定理与特征条件独立假设的分类方法,它基于特征条件独立假设学习输入和输出的联合概率分布,然后采用贝叶斯定理求出后验概率最大的类别作为预测实例的类别,是属于生成模型中的一种方法。

2. 朴素贝叶斯模型介绍

2.1 朴素贝叶斯模型介绍

    对于输入空间 X ⊆ R n \mathcal{X} \subseteq \mathbf{R}^{n} XRn 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} xX为输入特征向量, y ∈ Y y \in \mathcal{Y} yY为输出类标记,则训练集可以表示为:
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(XY)因此,朴素贝叶斯模型实际是将学习联合概率分布 P ( X , Y ) P(X, Y) P(X,Y)转化为学习先验概率分布 P ( Y ) P(Y) P(Y)和条件概率分布 P ( X ∣ Y ) P\left(X | Y\right) P(XY),具体的公式表达如下:

  • 先验概率分布:
    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=xY=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=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(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=ckX=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=ckX=x)=kP(X=xY=ck)P(Y=ck)P(X=xY=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=ckX=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)=argckmaxkP(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)jP(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)=Ni=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)=ajlY=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)=ajlY=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πσyck2 1exp2σ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. 总结

    朴素贝叶斯模型的原理其实挺简单的,其应用以前主要是在一些文本分类任务,比如垃圾邮件分类,但是,由于朴素贝叶斯模型假设特征之间是条件独立的,因此,这个假设在现实生活中是很难完全达到的,特别是在文本任务中,词汇之间常常有序列相关关系,因此,此时如果使用朴素贝叶斯方法可能效果并不一定好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值