参考文章:用Python开始机器学习(6:朴素贝叶斯分类器)
贝叶斯定理
贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。(百度百科)
在机器学习中,通常描述为当一个样本拥有某一个特征的条件下,它被分为这一类的概率,有公式:
其中随机变量C表示样本为C类的概率,F1表示测试样本某特征出现的概率。上式表示对于某个样本,特征F1出现时,该样本被分为C类的条件概率。
而根据这个公式判断样本分类的过程为:当样本C的特征F1=1,则计算P(C=1|F1=1)与P(C=0|F=1)的概率谁比较大,更大的就分为那一类。(C=0/1代表分类种类,可以有更多种)
先验概率:P(C):可以从已有的训练集中计算分为C类的样本占所有样本的比重。
证据:P(F1):表示对于某测试样本,特征F1出现的概率。同样可以从训练集中F1特征对应样本所占总样本的比例得出。
似然:即上式P(F1|C),表示如果知道一个样本分为C类,那么他的特征为F1的概率是多少。
对于多个特征的分析来说,贝叶斯公式拓展为:
显然这公式的分子相当复杂,为了简化运算,“朴素”这个概念由此而来。
朴素贝叶斯
若每个特征相互独立,上式的分子可以简化为:P(C)*P(F1|C)*P(F2|C)…P(Fn|C)。虽然实际情况下,某个事物的特征不会都相互独立,但是在实际大量应用朴素贝叶斯算法后效果不差。
使用贝叶斯算法进行分类的时候,我们比较的是分类种类下哪一方的概率比较大,因此只为了比较大小,分母同样可以省略计算。
平滑处理
由上可知,为了贝叶斯公式成立,需要确保所有“证据”出现的机率不为0,即P(Fx)!=0,但是实际完全可能对于某个样本来说不包含某一特征。因此需要进行一点处理,例如:
加法平话/拉普拉斯平滑:将所有计数+1
Lidstone平滑:增加一个大于0的可调参数alpha
例如,在所有6个分为C=1的影评样本中,某个特征F1=1不存在,则P(F1=1|C=1) = 0/6,P(F1=0|C=1) = 6/6。
经过加法平滑后,P(F1=1|C=1) = (0+1)/(6+2)=1/8,P(F1=0|C=1) = (6+1)/(6+2)=7/8。
注意分母的+2,这种特殊处理使得2个互斥事件的概率和恒为1。
解决问题
无平滑处理
由上面概念可知,这里需要比较的是P(Y=-1|(X1=2)(X2=S))与P(Y=1|(X1=2)(X2=S))的大小。省略计算后也就是比较
P(Y=-1) * P(X1=2|Y=-1) * P(X2=S|Y=-1)
与
P(Y=1) * P(X1=2|Y=1) * P(X2=S|Y=1) 的大小。
Y=-1:6/15* 2/6* 3/6=1/15
Y=1:9/15* 3/9* 1/9=1/45
因此x=(2,S)分类为Y=-1
平滑处理
使用拉普拉斯平滑处理:每一项加上对应的种类的数量
有P(Y=-1)=6+1/15+2 ;P(X1=2|Y=-1)=2+1/6+3……
因此
Y=-1:7/17* 3/9* 4/9=0.0610
Y=1:10/17* 4/12* 2/12=0.0327
因此选择Y=-1