简介
贝叶斯推理提供了一种概率手段。它基于如下的假定,即待考查的量遵循某概率分布,且可根据这些概率及已观察到的数据进行推理。(机器学习 Tom M. Mitchell)
朴素贝叶斯分类器在某些领域内性能可以与神经网络和决策树学习相当。
贝叶斯定理
P(A) 表示事件A发生的概率, P(A|B) 表示事件B发生的情况下事件A发生的概率
P(A|B)=P(AB)P(B)
贝叶斯公式:
P(B|A)=P(A|B)P(B)P(A)
朴素贝叶斯
朴素贝叶斯分类的目的是要在给定实例的属性值 <a1,a2,…,an> 的情况下,得到最可能的目标属性值
vMAP=argmaxvj∈VP(vj|a1,a2,…,an)=argmaxvj∈VP(a1,a2,…,an|vj)P(vj)P(a1,a2,…,an)=argmaxvj∈VP(a1,a2,…,an|vj)P(vj)
其中 argmaxf(x) 表示使得 f(x) 函数值最大的 x 的值,所以最后一步可以去掉分母。
朴素贝叶斯分类器假定每个属性值之间相互条件独立,所以
P(a1,a2,…,an|vj)=∏iP(ai|vj)
朴素贝叶斯分类器:
vNB=argmaxvj∈VP(vj)∏iP(ai|vj)
其中 P(vj),P(ai|vj) 需要在训练数据集上学习。
本文数据集(出自机器学习Tom M.Mitchell)如下:
Outlook | Temperature | Humidity | Wind | PlayTennis |
---|---|---|---|---|
Sunny | Hot | High | Weak | No |
Sunny | Hot | High | Strong | No |
Overcast | Hot | High | Weak | Yes |
Rain | Mild | High | Weak | Yes |
Rain | Cool | Normal | Weak | Yes |
Rain | Cool | Normal | Strong | No |
Overcast | Cool | Normal | Strong | Yes |
Sunny | Mild | High | Weak | No |
Sunny | Cool | Normal | Weak | Yes |
Rain | Mild | Normal | Weak | Yes |
Sunny | Mild | Normal | Strong | Yes |
Overcast | Mild | High | Strong | Yes |
Overcast | Hot | Normal | Weak | Yes |
Rain | Mild | High | Strong | No |
使用上表的数据分类以下实例:
<Outlook=Sunny,Temperature=Cool,Humidity=High,Wind=Strong>
目标属性PlayTennis 的值是yes还是no。
vNB=argmaxvj∈{yes,no}P(vj)∏iP(ai|vj)=argmaxvj∈{yes,no}P(vj)P(Sunny|vj)P(Cool|vj)P(High|vj)P(Strong|vj)
为了表达简便,省略了属性名称。根据数据集,可以很容易地得到:
P(PlayTennis=Yes)=9/14P(PlayTennis=No)=5/14P(Wind=Strong|PlayTennis=Yes)=3/9P(Wind=Strong|PlayTennis=No)=3/5
同理可得其他。
最后计算得
P(Yes)P(Sunny|Yes)P(Cool|Yes)P(High|Yes)P(Strong|Yes)=0.0053P(No)P(Sunny|No)P(Cool|No)P(High|No)P(Strong|No)=0.0206 所以应当为此实例的目标属性赋值为No。
假如数据集中PlayTennis=no时,观察到的Wind=Strong的数据量为0,就会出现不管其他属性多适合PlayTennis=no,也只能得到0的概率。为了解决这个问题,可以为属性的每个属性值确定一个先验估计,比如p=1/k(k为不同属性值的数量),那么该属性值的概率就可以设为
nc+mpn+m
其中m为正的常量,表示该估计对数据集的影响。
当属性值为连续的实数时,假定该数据符合某种概率分布,比如正态分布,则可以使用相应的概率密度函数估计相应的概率值。
小结
由于朴素贝叶斯主要是对理论的理解,计算过程中需要计算很多中间变量,导致代码混乱,因此就不贴出来了,有需要的读者可以到这里查看。