Naive Bayes分类器
Naive Bayes是一个概率分类器,也就是说,在文档d中,返回所有类别c中后验概率最大的类别 c ^ \hat{c} c^:
c ^ = argmax P ( c ∣ d ) \hat{c}=\text{argmax}P(c\vert d) c^=argmaxP(c∣d)
回顾一下贝叶斯法则:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) P ( y ) P(x\vert y)=\frac{P(y\vert x)P(x)}{P(y)} P(x∣y)=P(y)P(y∣x)P(x)
它把任何条件概率转化成了三个概率。
其中, P ( y ) P(y) P(y)是先验概率或者边缘概率。
贝叶斯法则可以从条件概率的定义推导,过程如下:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A\vert B) = \frac{P(A\cap B)}{P(B)} P(A∣B)=P(B)P(A∩B)
又,
P ( A ∣ B ) P ( B ) = P ( A ∩ B ) = P ( B ∣ A ) P ( A ) P(A\vert B)P(B) = P(A\cap B) = P(B\vert A)P(A) P(A∣B)P(B)=P(A∩B)=P(B∣A)P(A)
所以,
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A\vert B) = \frac{P(B\vert A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)
上面第二个公式又叫做概率乘法法则。
回到之前的 c ^ \hat{c} c^,那么此时有:
c ^ = argmax P ( c ∣ d ) = argmax P ( d ∣ c ) P ( c ) P ( d ) \hat{c}=\text{argmax}P(c\vert d)=\text{argmax}\frac{P(d\vert c)P(c)}{P(d)} c^=argmaxP(c∣d)=argmaxP(d)P(d∣c)P(c)
因为 P ( d ) P(d) P(d)对于任何 c c c都是一个不变的值,所以可以省去:
c ^ = argmax P ( c ∣ d ) = argmax P ( d ∣ c ) P ( c ) \hat{c}=\text{argmax}P(c\vert d)=\text{argmax}P(d\vert c)P(c) c^=argmaxP(c∣d)=argmaxP(d∣c)P(c)
上式, P ( d ∣ c ) P(d\vert c) P(d∣c)叫做似然(likelihood), P ( c ) P(c) P(c)即先验概率(prior probability)。
此时,假设文档
d
d
d由n
个特征组成,则有:
c ^ = argmax P ( f 1 , f 2 , … , f n ∣ c ) ⏞ likelihood P ( c ) ⏞ prior \hat{c}=\text{argmax}\overbrace{P(f_1,f_2,\dots,f_n\vert c)}^{\text{likelihood}}\ \overbrace{P(c)}^{\text{prior}} c^=argmaxP(f1,f2,…,fn∣c) likelihood P(c) prior
要计算上面的似然,需要很多的参数和很大的训练集,这个很难实现。
朴素贝叶斯有两个假设:
- 位置无关
- P ( f i ∣ c ) P(f_i\vert c) P(fi∣c)条件独立,也称朴素贝叶斯假设
所以上式可以简化为:
P ( f 1 , f 2 , … , f n ∣ c ) = P ( f 1 ∣ c ) P ( f 2 ∣ c ) … P ( f n ∣ c ) P(f_1,f_2,\dots,f_n\vert c)=P(f_1\vert c)P(f_2\vert c)\dots P(f_n\vert c) P(f1,f2,…,fn∣c)=P(f1∣c)P(f2∣c)…P(fn∣c)
即:
C N B = argmax P ( c ) ∏ f ∈ F P ( f ∣ c ) C_{NB}=\text{argmax}P(c)\prod_{f\in F}P(f\vert c) CNB=argmaxP(c)f∈F∏P(f∣c)
**词袋模型(bag of words)**不考虑词语的位置,把词语出现的频次当做特征,于是有:
C N B = argmax P ( c ) ∏ i ∈ p o s i t i o n s P ( w i ∣ c ) C_{NB}=\text{argmax}P(c)\prod_{i\in positions}P(w_i\vert c) CNB=argmaxP(c)i∈positions∏P(wi∣c)
为了避免数值下溢和提高计算速度,通常使用对数形式:
c N B = argmax log P ( c ) + ∑ i ∈ p o s i t i o n s log P ( w i ∣ c ) c_{NB}=\text{argmax}\log{P(c)+\sum_{i\in positions}\log{P(w_i\vert c)}} cNB=argmaxlogP(c)+i∈positions∑logP(wi∣c)
训练朴素贝叶斯分类器
为了知道 P ( c ) P(c) P(c)和 P ( f i ∣ c ) P(f_i\vert c) P(fi∣c),我们还是使用最大似然估计(MLE)。
有:
P
^
(
c
)
=
N
c
N
d
o
c
\hat{P}(c)=\frac{N_c}{N_{doc}}
P^(c)=NdocNc
P ^ ( w i ∣ c ) = c o u n t ( w i , c ) ∑ w ∈ V c o u n t ( w , c ) \hat{P}(w_i\vert c)=\frac{count(w_i,c)}{\sum_{w\in V}count(w,c)} P^(wi∣c)=∑w∈Vcount(w,c)count(wi,c)
为了避免某个概率值为0,我们使用拉普拉斯平滑(Laplace smooth or add-one smooth):
P ^ ( w i ∣ c ) = c o u n t ( w i , c ) + 1 ∑ w ∈ V ( c o u n t ( w , c ) + 1 ) = c o u n t ( w i , c ) + 1 ( ∑ w ∈ V c o u n t ( w , c ) ) + ∣ V ∣ \hat{P}(w_i\vert c)=\frac{count(w_i,c)+1}{\sum_{w\in V}(count(w,c)+1)}=\frac{count(w_i,c)+1}{(\sum_{w\in V}count(w,c))+\vert V\vert} P^(wi∣c)=∑w∈V(count(w,c)+1)count(wi,c)+1=(∑w∈Vcount(w,c))+∣V∣count(wi,c)+1
对于unknown word怎么处理呢?答案是:直接从测试数据集中移除这些词,不计算概率!
联系我
-
Email: stupidme.me.lzy@gmail.com
-
WeChat: luozhouyang0528
-
个人公众号,你可能会感兴趣: