最近工作需要重新熟悉了贝叶斯估计理论。想起还是学生时候,自己写的作业,整理了一下,mark。
废话少说,直接上公式:
贝叶斯公式: 是一个完备集合,
,那么
,
解释一下: 这个公式是说,有n个条件,都会导致事情B发生,如果事情B发生了,我们可以推算各个条件出现的概率,或者说跟各个条件的关系程度。
举个栗子: 迟到,旷课都会导致扣A学分;现在A扣了学分,那么我们推算,这学期A迟到的概率是多少,A旷课的概率是多少。
上面还是废话,直接说在邮件分类的应用吧。
我们拿到邮件(图片无法处理,不考虑它,只考虑标题和内容的文字),
完备集:邮件的分类, 垃圾 正常;邮件里面都有的是 词组: 我们想知道的是:在特定词组X情况下,它是垃圾邮件和正常邮件的概率。
P(垃圾|X) = P(X|垃圾)*P(垃圾)/(P(X|垃圾)*P(垃圾)+P(X|正常)*P(正常)) (1)
右边的P(X|垃圾),P(X|正常),P(垃圾),P(正常)由训练集得来。
假设训练集各垃圾邮件和正常邮件各50封,那么P(垃圾),P(正常)各为0.5。 训练邮件词组假设100个, 根据他们在垃圾邮件出现的频率,计算每个词组的频率P(x|垃圾),同样计算这些词组正常邮件的频率。
下面计算,P(X|垃圾) ,P(X|正常);
X是z个词组集合,x1,x2,...xz, P(X|垃圾) = sum(P(xi|垃圾)); 同样,P(X|正常)= sum(P(xi|正常));
这样,公式1的各个参数都有了,那么左边的结果就出来了。 我们设置阈值0.5。大于0.5的是垃圾邮件,小于0.5的是正常邮件。
ok 这样就完成理论推导。
下面就是代码实现了。前提你要有一个分词程序,网上可以自己找到,中文的英文的都有。剩下的就不是难题了。