手写算法实现 之 朴素贝叶斯 Naive Bayes 篇

Posted 风信子的猫Redamancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写算法实现 之 朴素贝叶斯 Naive Bayes 篇相关的知识,希望对你有一定的参考价值。

【手写算法实现】 之 朴素贝叶斯 Naive Bayes 篇

朴素贝叶斯模型(naive bayes)属于分类模型,也是最为简单的概率图模型,对于之后理解HMM、CRF等模型,大有裨益。这里手写算法介绍一下朴素贝叶斯模型。

朴素贝叶斯模型

朴素贝叶斯模型(Naive Bayes)中的“朴素”就在于它的条件独立性假设:
p ( X 1 , X 2 , . . . , X n ∣ Y ) = p ( X 1 ∣ Y ) ⋅ p ( X 2 ∣ Y ) ⋯ p ( X n ∣ Y ) p(X_1,X_2,...,X_n\\mid Y)=p(X_1\\mid Y)\\cdot p(X_2\\mid Y)\\cdots p(X_n\\mid Y) p(X1,X2,...,XnY)=p(X1Y)p(X2Y)p(XnY)
用概率图表示如下:

所以它的联合概率分布:
p ( X 1 , X 2 , . . . , X n , Y ) = p ( Y ) ∏ i = 1 n p ( X i ∣ Y ) p(X_1,X_2,...,X_n,Y)=p(Y)\\prod_i=1^np(X_i\\mid Y) p(X1,X2,...,Xn,Y)=p(Y)i=1np(XiY)
这里 c k ( k = 1 , 2 , . . . , K ) c_k(k=1,2,...,K) ck(k=1,2,...,K) 表示分类器所属的类别

这里还要补充一个前提条件,就是贝叶斯定理
P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) . P(Y|X)=\\frac P(X|Y)P(Y)P(X). P(YX)=P(X)P(XY)P(Y).
其中,P ( Y ) (Y) (Y)叫做先验概率,叫做条件概率, P ( Y ∣ X ) P(Y|X) P(YX)叫做后验概率。

根据上面两大前提条件,我们可以得到朴素贝叶斯模型。实际上我们就是要最大化后验概率,从而得到类别标签。
P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) P ( X = x ) = P ( Y = c k ) ∏ j = 1 n P ( X = x ( i ) ∣ Y = c k ) P ( X = x ) P(Y=c_k|X=x)=\\frac P(X=x|Y=c_k)P(Y=c_k)P(X=x)=\\frac P(Y=c_k)\\prod_j=1^nP(X=x^(i)|Y=c_k)P(X=x) P(Y=ckX=x)=P(X=x)P(X=xY=ck)P(Y=ck)=P(X=x)P(Y=ck)j=1nP(X=x(i)Y=ck)
由于 P ( X = x ) P(X=x) P(X=x)对于所有的类别标签来说的话,都是一样的,所以可以去掉,最终得到的公式如下:
y = a r g m a x c k P ( Y = c k ) ∏ j = 1 n P ( X = x ( i ) ∣ Y = c k ) y=argmax_c_kP(Y=c_k)\\prod_j=1^nP(X=x^(i)|Y=c_k) y=argmaxckP(Y=ck)j=1nP(X=x(i)Y=ck)
这就是朴素贝叶斯的公式

在朴素贝叶斯估计中,条件独立性假设是非常强的假设,实际上是为了简化运算,实际上很多时候,特征之间是存在联系的,但是这样朴素贝叶斯也更加简单,与此同时,损失了一些精度。

参数估计 先验概率与条件概率的计算

当得到了朴素贝叶斯的公式后,那么其中的 p ( Y = c k ) p(Y=c_k) p(Y=ck) p ( X i = x i ∣ Y = c k ) p(X_i=x_i\\mid Y=c_k) p(Xi=xiY=ck)怎么求呢?在这里,我们需要分情况讨论:得看特征本身是离散的还是连续的。

  • 当特征是离散的时候,我们使用极大似然估计,叫做多项式模型,MultinomialNB就是先验为多项式分布的朴素贝叶斯
  • 当特征是连续的时候,我们让其满足高斯分布,叫做高斯模型,所以GaussianNB就是先验为高斯分布的朴素贝叶斯
  • 当特征是二元离散值或者很稀疏的多元离散值的时候,叫做伯努利模型,BernoulliNB就是先验为伯努利分布的朴素贝叶斯。

朴素贝叶斯将实例分到后验概率最大的类中,这其实等价于经验风险最小化

多项式模型

当特征是离散的时候,我们使用极大似然估计去得到先验概率与条件概率。

1.求解 p ( Y = c k ) p(Y=c_k) p(Y=ck)
p ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , . . . , K , N 表示样本量 p(Y=c_k)=\\frac\\sum_i=1^NI(y_i=c_k)N,k=1,2,...,K,N表示样本量 p(Y=ck)=Ni=1NI(yi=ck),k=1,2,...,K,N表示样本量
2.求解 p ( X i = x i ∣ Y = c k ) p(X_i=x_i\\mid Y=c_k) p(Xi=xiY=ck)

假设第 i i i个特征可能的取值为 A i = a i 1 , a i 2 , . . . , a i S i A_i=\\a_i1,a_i2,...,a_iS_i\\ Ai以上是关于手写算法实现 之 朴素贝叶斯 Naive Bayes 篇的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯分类器

朴素贝叶斯(Naive Bayes)算法

朴素贝叶斯算法(Naive Bayes)

算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

数据挖掘十大经典算法(1)——朴素贝叶斯(Naive Bayes)

深入理解朴素贝叶斯(Naive Bayes)算法