朴素贝叶斯

朴素贝叶斯算法原理小结

在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X)Y=f(X),要么是条件分布P(Y|X)P(Y|X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y)P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)P(Y|X)=P(X,Y)/P(X)得出。

朴素贝叶斯的模型

从统计学知识回到我们的数据分析。假如我们的分类模型样本是:

(x(1)1,x(1)2,...x(1)n,y1),(x(2)1,x(2)2,...x(2)n,y2),...(x(m)1,x(m)2,...x(m)n,ym)(x1(1),x2(1),...xn(1),y1),(x1(2),x2(2),...xn(2),y2),...(x1(m),x2(m),...xn(m),ym)    即我们有m个样本,每个样本有n个特征,特征输出有K个类别,定义为C1,C2,...,CKC1,C2,...,CK。

  从样本我们可以学习得到朴素贝叶斯的先验分布P(Y=Ck)(k=1,2,...K)P(Y=Ck)(k=1,2,...K),接着学习到条件概率分布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),然后我们就可以用贝叶斯公式得到X和Y的联合分布P(X,Y)了。联合分布P(X,Y)定义为:

 

P(X,Y=Ck)=P(Y=Ck)P(X=x|Y=Ck)=P(Y=Ck)P(X1=x1,X2=x2,...Xn=xn|Y=Ck)(1)(2)(1)P(X,Y=Ck)=P(Y=Ck)P(X=x|Y=Ck)(2)=P(Y=Ck)P(X1=x1,X2=x2,...Xn=xn|Y=Ck)

  从上面的式子可以看出P(Y=Ck)P(Y=Ck)比较容易通过最大似然法求出,得到的P(Y=Ck)P(Y=Ck)就是类别CkCk在训练集里面出现的频数。但是P(X1=x1,X2=x2,...Xn=xn|Y=Ck)P(X1=x1,X2=x2,...Xn=xn|Y=Ck)很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:P(X1=x1,X2=x2,...Xn=xn|Y=Ck)=P(X1=x1|Y=Ck)P(X2=x2|Y=Ck)...P(Xn=xn|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)   

       从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征(x(test)1,x(test)2,...x(test)n(x1(test),x2(test),...xn(test),我们如何判断它属于哪个类型?既然是贝叶斯模型,当然是后验概率最大化来判断分类了。我们只要计算出所有的K个条件概率P(Y=Ck|X=X(test))P(Y=Ck|X=X(test)),然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。

朴素贝叶斯的推断过程

朴素贝叶斯的参数估计

在上一节中,我们知道只要求出P(Y=Ck)和P(Xj=X(test)j|Y=Ck)(j=1,2,...n)P(Y=Ck)和P(Xj=Xj(test)|Y=Ck)(j=1,2,...n),我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率。

    对于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=1|Y=Ck)X(test)j+(1−P(Xj=1|Y=Ck))(1−X(test)j)P(Xj=Xj(test)|Y=Ck)=P(Xj=1|Y=Ck)Xj(test)+(1−P(Xj=1|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)的概率分布是:

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

朴素贝叶斯算法过程

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值