零、写在前面
参考资料:
- 《机器学习》周志华
- 《机器学习实战》Peter Harrington
- 斯坦福 CS 229 吴恩达
一、属性条件独立性假设
由上篇文章中介绍的贝叶斯决策论知道,我们想做这样的事:
给出一个样本各个属性xi的值(记为向量大X),求出这个样本属于各个类别c的概率,输出这些概率中最大的那个类别。由贝叶斯定理,这概率(等号左侧)可以这样来求:
事实上,我们觊觎的这个概率是可以直接展开的:
这样就好算了。
接着,计算好了 P(X|c) P ( X | c ) ,代入 P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) (其余两项很容易解决),就大功告成啦。
这就是朴素贝叶斯。
好的我们现在再回过头来细致地讲述一遍。事实上,要完成刚才做的 “不妨强行地令” 这一操作是需要一个假设的,即属性条件独立性假设,也称作贝叶斯假设。这一假设说的就是:
各个属性x之间是没有相互关系的。
公式化地表达就是:
但是我们要记住,所谓不存在相互影响的关系并不准确,这只是我们为了计算方便而作的一个假设(很强的一个假设),并且这一个方法在实际应用的时候效果还不错。
有了上面的公式,我们就要想办法计算等号右侧的那个概率了。它表示的是,在给定类别c的情形,第i个属性取特定值xi的概率。即(用频率估计概率):
至此我们在公式 P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) 中还剩下两个需要求的量了。
现在我们说P(c),它表示的是样本类别为c的概率。很自然地,它可以这样算出来:
其实还剩下一个P(X),但是我们一会就会发现,其实这个概率并不需要计算。
好的,现在我们回到贝叶斯决策论。我们需要对于给出一个样本各个属性xi的值(记为向量大X),求出这个样本属于各个类别c的概率,输出这些概率中最大的那个类别。综合上面得到的结论,把这句话翻译成公式,则有:
对于所有类别来说,P(X)是相同的,所以这一因子在最后一个等号去掉了。
这就是朴素贝叶斯。
将上面的各个式子放到一起:
P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X )
其中P(c)=某类样本个数总共样本个数 其 中 P ( c ) = 某 类 样 本 个 数 总 共 样 本 个 数
P(X|c)=P(x1|c)P(x2|c)P(x3|c).....P(xi|c) P ( X | c ) = P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c )
P(xi|c)=某类样本中,第i个属性取值xi的个数这类样本总个数 P ( x i | c ) = 某 类 样 本 中 , 第 i 个 属 性 取 值 x i 的 个 数 这 类 样 本 总 个 数
二、拉普拉斯修正
我们接下来要讨论的是这两个式子的升级版:
考虑这样的情形,我们手头上的训练集将将够大,但是存在着对于某一个类别, 没有某一个属性取特定值的样本。那如果我们直接用之前的方法计算,我们会发现,在上面第二个式子中,分子为零,计算出的 P(xi|c) P ( x i | c ) 也为零。接着回溯到 P(X|c)=P(x1|c)P(x2|c)P(x3|c).....P(xi|c) P ( X | c ) = P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c ) ,乘数因子有一个是零,那么整个的 P(X|c) P ( X | c ) 也为零。再往前推, P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) 也变成了零。
也就是说,因为一个样本的缺失,造成了这个样本所属的类不能被预测到(概率恒为零)。
我们要解决这个问题,可以用拉普拉斯修正的方法:
这样,对于某一个缺失样本的类别来说,它的概率就变成了一个很小的数(这也是符合逻辑的),而非零了。