朴素贝叶斯分类器

贝叶斯决策论是通过相关的概率已知的情况下利用损失来选择最优类别的分类器。本文章的主要知识如下:概率论基础,贝叶斯分类器,朴素贝叶斯。

概率论基础:P(A)=事件A发生的概率,P(B)=事件B发生的概率,P(AB)=事件AB同时发生的概率,P(A U B)=P(A)+P(B)-P(AB),P(AB)=P(A|B).P(B)=P(B|A).P(A);全概率公式P(A)=P(AS)=P(A(B1 U B2 U B3 U.......U Bn))=P(AB1)+P(AB2)+......+P(ABn)样本空间划分为n个各不相容的事件;贝叶斯定理P(A|B)=P(AB)/P(B)=P(B|A).P(A)/P(B),其中P(A|B)叫作后验概率,P(A)叫作先验概率。

贝叶斯决策:1.通过训练集学习到先验概率分布及条件概率分布,P(Y=Ck)[k=1,2,3...k],P(X=x | Y=Ck)=P(X1=x1,X2=x2,......Xn=xn | Y=Ck),于是,我们可以得到P(X,Y)=P(Y=Ck).P(X=x|Y=Ck);2.对于给定的输入x,通过学习到的概率计算后验概率分布P(Y=Ck | X=x),将概率P(Y=Ck | X=x)最大的类Ck作为输入x的预测输出,P(Y=Ck | X=x)=P(Y=Ck).P(X=x|Y=Ck)/P(X=x)③,其中对于每一个输入x,P(X=x)是一致的,故无需计算③式的分母;3.于是贝叶斯决策的过程就是这个样子的了。

贝叶斯决策的损失函数:后验概率最大化=损失函数最小化,我们定义顺势函数为:L(Y,f(X))={1,Y=f(X);0,otherwise}

极大似然估计:P(Y=Ck)表达了样本空间中各类样本所占的比例,根据大数定理,当训练集中包含充足的独立同分布样本时,P(Y=Ck)可以通过各类的样本出现的频率来进行估计;然而,对于P(X=x | Y=Ck)是很难估计的,假设样本d个属性是二元值得,那么样本空间一共有2**d的可能取值,但是训练集中的样本数量是比较小的,未被观测到与出现概率为0通常是不同的。

假设P(x|c)具有确定的形式并且被参数向量唯一确定,则我们的任务是利用训练集估计参数Qc,将P(x|c)记为P(x|Qc)。令Dc表示训练集D第c类样本的集合,假设样本独立同分布,则参数Qc对于数据集Dc的似然是

  连乘容易造成下溢,通常使用对数似然

  注意。这种参数化的方法虽然能使类条件概率估计变得相对简单,但是估计结果的准确性严重依赖所假设的概率分布形式是否符合潜在的真实数据分布

朴素贝叶斯:由之前的知识我们知道,P(Y=Ck | X=x)=P(Y=Ck).P(X=x|Y=Ck)/P(X=x),朴素贝叶斯在此大胆地假设:属性是条件独立且同分布的,于是P(X=x|Y=Ck)的概率估计就变得很简单了,P(X=x|Y=Ck)= P(X1=x1,X2=x2.....Xn=xn | Y=Ck),由属性独立性可知,P(X=x|Y=Ck)= P(X1=x1,X2=x2.....Xn=xn | Y=Ck) = P(X1=x1 | Y=Ck).P(X2=x2 | Y=Ck)......P(Xn=xn | Y=Ck)。从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。

朴素贝叶斯的推断公式:Cresult = argmaxP(Y=Ck | X=Xtest) = argmaxP(Y=Ck).P(X1=x1 | Y=Ck).P(X1=x1 | Y=Ck)P(X2=x2 | Y=Ck)......P(Xn=xn | Y=Ck)/P(X=Xtest) = argmaxP(Y=Ck).P(X1=x1 | Y=Ck).P(X1=x1 | Y=Ck)P(X2=x2 | Y=Ck)......P(Xn=xn | Y=Ck)。现在我们来谈谈如何通过训练集来计算这个两个概率。

对于P(Y=Ck)P(Y=Ck),比较简单,通过极大似然估计我们很容易得到P(Y=Ck)P(Y=Ck)为样本类别CkCk出现的频率,即样本类别CkCk出现的次数mkmk

除以样本总数m。

对于P(Y=Ck)P(Y=Ck),比较简单,通过极大似然估计我们很容易得到P(Y=Ck)P(Y=Ck)为样本类别CkCk出现的频率,即样本类别CkCk出现的次数mkmk除以样本总数m。

    对于P(Xj=X(test)j|Y=Ck)(j=1,2,...n)P(Xj=Xj(test)|Y=Ck)(j=1,2,...n),这个取决于我们的先验条件:

 

    a) 如果我们的XjXj是离散的值,那么我们可以假设XjXj符合多项式分布,这样得到P(Xj=X(test)j|Y=Ck)P(Xj=Xj(test)|Y=Ck) 是在样本类别CkCk中,X(test)jXj(test)出现的频率。即:

P(Xj=X(test)j|Y=Ck)=mkjtestmkP(Xj=Xj(test)|Y=Ck)=mkjtestmk

    其中mkmk为样本类别CkCk出现的次数,而mkjtestmkjtest为类别为CkCk的样本中,第j维特征X(test)jXj(test)出现的次数。

    某些时候,可能某些类别在样本中没有出现,这样可能导致P(Xj=X(test)j|Y=Ck)P(Xj=Xj(test)|Y=Ck)为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:

P(Xj=X(test)j|Y=Ck)=mkjtest+λmk+OjλP(Xj=Xj(test)|Y=Ck)=mkjtest+λmk+Ojλ
   

    其中λλ 为一个大于0的常数,常常取为1。OjOj为第j个特征的取值个数。

 

    b)如果我们我们的XjXj是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设XjXj符合伯努利分布,即特征XjXj出现记为1,不出现记为0。即只要XjXj出现即可,我们不关注XjXj的次数。这样得到P(Xj=X(test)j|Y=Ck)P(Xj=Xj(test)|Y=Ck) 是在样本类别CkCk中,X(test)jXj(test)出现的频率。此时有:

P(Xj=X(test)j|Y=Ck)=P(Xj|Y=Ck)X(test)j+(1P(Xj|Y=Ck))(1X(test)j)P(Xj=Xj(test)|Y=Ck)=P(Xj|Y=Ck)Xj(test)+(1−P(Xj|Y=Ck))(1−Xj(test))

    其中,X(test)jXj(test)取值为0和1。

  

    c)如果我们我们的XjXj是连续值,我们通常取XjXj的先验概率为正态分布,即在样本类别CkCk中,XjXj的值符合正态分布。这样P(Xj=X(test)j|Y=Ck)P(Xj=Xj(test)|Y=Ck)的概率分布是:

P(Xj=X(test)j|Y=Ck)=12πσ2kexp((X(test)jμk)22σ2k)P(Xj=Xj(test)|Y=Ck)=12πσk2exp(−(Xj(test)−μk)22σk2)

    其中μkσ2kμk和σk2是正态分布的期望和方差,可以通过极大似然估计求得。μkμk为在样本类别CkCk中,所有XjXj的平均值。σ2kσk2为在样本类别CkCk中,所有XjXj的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了

朴素贝叶斯算法小结

    朴素贝叶斯算法的主要原理基本已经做了总结,这里对朴素贝叶斯的优缺点做一个总结。

    朴素贝叶斯的主要优点有:

    1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

    2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

    3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

    朴素贝叶斯的主要缺点有:   

    1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

    2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

    3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

    4)对输入数据的表达形式很敏感。


;