手写算法实现 之 朴素贝叶斯 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,...,Xn∣Y)=p(X1∣Y)⋅p(X2∣Y)⋯p(Xn∣Y)
用概率图表示如下:
所以它的联合概率分布:
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=1∏np(Xi∣Y)
这里
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(Y∣X)=P(X)P(X∣Y)P(Y).
其中,P
(
Y
)
(Y)
(Y)叫做先验概率,叫做条件概率,
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)叫做后验概率。
根据上面两大前提条件,我们可以得到朴素贝叶斯模型。实际上我们就是要最大化后验概率,从而得到类别标签。
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=ck∣X=x)=P(X=x)P(X=x∣Y=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=1∏nP(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=xi∣Y=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)=N∑i=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=xi∣Y=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 Bayesian classification)