朴素贝叶斯
机器学习
1. 朴素贝叶斯模型
假如样本是:
(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)
即:有m个样本,每个样本有n个特征,特征输出有K个类别,定义为C1,C2,⋯,CK。
从样本可以学习得到朴素贝叶斯的先验分布P(Y=Ck)(k=1,2,...K),接着学习到条件概率分布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)
P(Y=Ck)就是类别Ck在训练集里面出现的频数。但是P(X1=x1,X2=x2,...Xn=xn|Y=Ck) 很难求出,朴素贝叶斯模型做了一个大胆的假设,即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)
如果特征真的非常不独立,那就尽量不要使用朴素贝叶斯模型。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然牺牲了准确性,但模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。
是给定测试集的一个新样本特征,(x(test)1,x(test)2,⋯,x(test)n),如何判断它属于哪个类型?贝叶斯模型通过后验概率最大化来分类。计算所有K个条件概率P(Y=Ck|X=X(test)),然后找出最大的条件概率对应的类别。
预测的类别Cresult是使P(Y=Ck|X=X(test))最大化的类别,数学表达式为:
Cresult=argmaxCkP(Y=Ck|X=X(test))=argmaxCkP(X=X(test)|Y=Ck)P(Y=Ck)/P(X=X(test))
对于所有的类别计算P(Y=Ck|X=X(test))时,分母是一样的,都是P(X=X(test))),这是一个归一化系数。因此,预测公式可以简化为:
Cresult=argmaxCkP(X=X(test)|Y=Ck)P(Y=Ck)=argmaxCkP(Y=Ck)∏j=1nP(Xj=X(test)j|Y=Ck)
2. 参数估计
只要求出P(Y=Ck)和P(Xj=X(test)j|Y=Ck)(j=1,2,...n),就可以通过比较得到朴素贝叶斯的推断结果。
P(Y=Ck)为样本类别Ck出现的频率,即样本类别Ck出现的次数mk除以样本总数m。
P(Xj=X(test)j|Y=Ck)(j=1,2,...n),取决于我们的先验条件:
1.如果Xj是离散值,可以假设Xj符合多项式分布,这样得到P(Xj=X(test)j|Y=Ck)是在样本类别Ck中,X(test)j出现的频率。即:
P(Xj=X(test)j|Y=Ck)=mkjtestmk
其中mk为样本类别Ck出现的次数,而mtestkj为类别为Ck的样本中,第j维特征X(test)j出现的次数。
某些时候,可能某些类别在样本中没有出现,这样可能导致P(Xj=X(test)j|Y=Ck)=0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:
P(Xj=X(test)j|Y=Ck)=mkjtest+λmk+Ojλ
其中λ为一个大于0的常数,常取为1。Oj为第j个特征的取值个数。
2.如果Xj是连续值,我们通常取Xj的先验概率为正态分布,即在样本类别Ck中,Xj的值符合正态分布。
P(Xj=X(test)j|Y=Ck)=12πσ2k−−−−√exp⎛⎝−(X(test)j−μk)22σ2k⎞⎠