前言:朴素贝叶斯应该可以说是机器学习十大算法里面里面比较简单的一个了,它主要解决的问题就是一个分类的问题。
学过概率论的同学应该都知道贝叶斯定理,所以这里我直接给出它的数学表达式P(Bi|A)= P ( B i ⋅ A ) P ( A ) \frac{P(Bi·A)}{P(A)} P(A)P(Bi⋅A)= P ( A ∣ B i ) ⋅ P ( B i ) ∑ j = 0 n P ( A ∣ B j ) ⋅ P ( B j ) \frac{P(A|Bi)·P(Bi)}{\displaystyle\sum_{j=0}^nP(A|Bj)·P(Bj)} j=0∑nP(A∣Bj)⋅P(Bj)P(A∣Bi)⋅P(Bi)
其中的先验概率可以通过抽样的方式来计算,根据大数定理,当样本越多的时候,所得到的结果就越接近真实的概率分布。
下面我们先来看一个例子
序号 | 样本 | 类别 In c=china |
---|---|---|
1 | Chinese Beijing Chinese | yes |
2 | Chinese Chinese Shanghai | yes |
3 | Chinese Macao | yes |
4 | Tokyo Japan Chinese | no |
现给定一个新样本Chinese Chinese Chinese Tokyo Japan,用朴素贝叶斯分类器对其进行分类,判断其是否属于china类别。
假设这里有Chinese这个特征。
Chinese在CHINA这个类别中出现过5次,在非CHINA的类别中出现过一次
假设B为Chinese,A为CHINA这个类别
P(B|A)= 5 8 \frac{5}{8} 85
P(A)= 3 4 \frac{3}{4} 43
P(B)= 6 11 \frac{6}{11} 116
P(A|B)= P ( B ∣ A ) ⋅ P ( A ) P ( B ) \frac{P(B|A)·P(A)}{P(B)} P(B)P(B∣A)⋅P(A)= 55 64 \frac{55}{64} 6455
包含Chinese这个词属于CHINA这个类别的概率为 55 64 \frac{55}{64} 6455。
这里还只是一个特征,现假设Chinese、Beijing、Shanghai、Macao、Tokyo、Japan这几个都属于特征。
在多个特征的情况下会发生什么情况呢?
相信学过概率论的同学都会对下列的式子进行展开吧
P(w1,w2,w3,…,wn)=P(w1)·P(w2|w1)·P(w3|w1,w2)…P(wn|w1,w2,w3,…,wn-1)
不难发现wn的出现的概率依赖于它前面的所有词,第一个P(w1)还挺好算的,第二个P(w2|w1)也还行,但是到了第三个,就开始难算了,那么P(wn|w1,w2,w3,…,wn-1)基本上是无法估算的
那么我们该怎么办呢?
下面我们就来介绍一下朴素贝叶斯吧
朴素贝叶斯其实做了一个非常简单的事情,就是做了一个假设,假设这些特征w1,w2,w3,…,wn之间都是相互独立的,然后计算在不同类别当中的概率,取概率最大的那一类为最终的分类结果。
P(A|wi)= P ( W 1 ∣ A ) P ( W 2 ∣ A ) . . . P ( W n ∣ A ) P ( A ) P ( w 1 ) P ( w 2 ) P ( w 3 ) . . . P ( w n ) \frac{P(W1|A)P(W2|A)...P(Wn|A)P(A)}{P(w1)P(w2)P(w3)...P(wn)} P(w1)P(w2)P(w3)...P(wn)P(W1∣A)P(W2∣A)...P(Wn∣A)P(A)
这样做的一个目的就是可以简化我们的运算。
我们接着回到上面那个例子
这里我使用多项式模型来推导一下上面那个问题的答案
多项式模型是以单词为粒度,对于重复出现的单词视为其多次出现。
先验概率P(A)= A 类 下 单 词 总 数 整 个 训 练 样 本 的 单 词 总 数 \frac{A类下单词总数}{整个训练样本的单词总数} 整个训练样本的单词总数A类下单词总数
类条件概率P(B|A)= A 类 下 单 词 B 在 各 个 文 档 中 出 现 过 的 次 数 之 和 + 1 类 A 下 单 词 总 数 + 训 练 样 本 包 含 多 少 种 单 词 \frac{A类下单词B在各个文档中出现过的次数之和+1}{类A下单词总数+训练样本包含多少种单词} 类A下单词总数+训练样本包含多少种单词A类下单词B在各个文档中出现过的次数之和+1
P(B|A)可以看作是单词B在证明d属于类A上提供了多大的证据,而P(A)则可以认为有多大的可能性属于A类
该文本用属性向量表示为d=(Chinese, Chinese, Chinese, Tokyo, Japan),类别集合为Y={yes, no}。
P(yes)= 8 11 \frac{8}{11} 118
P(no)= 3 11 \frac{3}{11} 113
计算先验概率
P(Chinese|yes)= ( 5 + 1 ) ( 8 + 6 ) \frac{(5+1)}{(8+6)} (8+6)(5+1)= 3 7 \frac{3}{7} 73 //如果觉得疑惑,可以去看前面的类条件概率公式。
P(Japan|yes) = ( 0 + 1 ) ( 8 + 6 ) \frac{(0+1)}{(8+6)} (8+6)(0+1) = 1 14 \frac{1}{14} 141
P(Tokyo|yes) = ( 0 + 1 ) ( 8 + 6 ) \frac{(0+1)}{(8+6)} (8+6)(0+1) = 1 14 \frac{1}{14} 141
P(Chinese|no) = ( 1 + 1 ) ( 3 + 6 ) \frac{(1+1)}{(3+6)} (3+6)(1+1) = 2 9 \frac{2}{9} 92
P(Japan|no) = ( 1 + 1 ) ( 3 + 6 ) \frac{(1+1)}{(3+6)} (3+6)(1+1) = 2 9 \frac{2}{9} 92
P((Tokyo|no) = ( 1 + 1 ) ( 3 + 6 ) \frac{(1+1)}{(3+6)} (3+6)(1+1) = 2 9 \frac{2}{9} 92
现在我们开始计算后验概率
P(yes|d)= ( 3 7 ) 3 (\frac{3}{7})^3 (73)3· 1 14 \frac{1}{14} 141 · 1 14 \frac{1}{14} 141 · 8 11 \frac{8}{11} 118 ≈0.00029209
P(no|d)= ( 2 9 ) 3 (\frac{2}{9})^3 (92)3· 2 9 \frac{2}{9} 92 · 2 9 \frac{2}{9} 92 · 3 11 \frac{3}{11} 113 ≈0.00014780
P(yes|d) > P(no|d)
故d属于CHINA类
朴素贝叶斯算法就是一个简单的分类算法,虽然它的思路很简单,但是它的运用却十分的广泛,而且十分稳定,且分类效果很好,例如我们平常的垃圾邮箱的分类等。但是它也有缺点,就是它首先假设特征之间是相互独立的。所以它在特征之间是相互独立的情况下,分类效果很好,但现实中特征之间相互独立毕竟还只是少数,对于那些相关性非常大的特征,使用朴素贝叶斯算法,它的分类效果就不是很好了。
朴素贝叶斯其实就做了一个非常简单的事情,就是做了一个假设,假设这些特征w1,w2,w3,…,wn之间都是相互独立的,然后计算在不同类别当中的概率,取概率最大的那一类为最终的分类结果。