使用贝叶斯进行垃圾邮件过滤的原理很简单,假如我们在邮件中发现一个词--“发票”,那么就根据这个词来计算这封邮件是垃圾邮件的概率
P(垃圾|发票) = P(发票|垃圾)P(垃圾)/P(发票)
P(垃圾|发票) :邮件中出现发票一词时,该邮件是垃圾邮件的概率
P(发票|垃圾): 在垃圾邮件中,发票一词出现的概率
P(垃圾) : 垃圾邮件的概率
P(发票) : 发票一词在邮件中出现的概率
P(正常) : 正常邮件的概率
P(发票) = P(发票|垃圾)P(垃圾) + P(发票|正常)P(正常)
第一步,需要一个训练样本,正常邮件,和垃圾邮件各选取2000封,然后统计各个词在垃圾邮件和正常邮件中出现的次数,经过统计,发票一词在垃圾邮件中出现了400封,而在正常邮件中,只有5封邮件,如此,P(发票|垃圾) = 0.2 P(发票|正常) = 0.0025。如果一个词只在垃圾邮件中出现呢,那么它在正常邮件中出现的概率应当是多少呢?显然不应该为0,为0的话,就无法参与计算,因此需要给一个默认值,可以先设置为0.01。随着垃圾邮件的过滤,每一个词在垃圾邮件中的概率和在正常邮件中的概率都是会变化的。
第二步,进行垃圾邮件的识别,这里面,P(垃圾) = P(正常) = 0.5,这个是先验概率,虽然有研究表明用户实际中收到的垃圾邮件占比达到80%,但先验概率仍设置为50%。将以上各值带入公式计算 P(垃圾|发票) = 0.2*0.5/(0.5*0.2+0.5*0.0025) = 0.98 也就是说,有98%的概率是垃圾邮件
但是单凭这一个词就判断它是垃圾邮件是不合理的,毕竟,在正常邮件中,也是可以出现发票一词的,那么该怎么办呢?
邮件中不止发票这一个词,还有其他的词,其他的词也是可以计算垃圾邮件的概率的,这样,我们对所有词都计算,假设单词序列为W1,W2,W3....Wn
p1 = p(垃圾|W1)
p2 = p(垃圾|W2)
.....
pn = p(垃圾|Wn)
将这些值从大到小排序,然后选出其中最大的k个值进行联合概率计算
P = p1*p2*p3...*pk/(p1*p2*p3...*pk + (1-p1)*(1-p2)*(1-p3)...*(1-pk))
公式是如何推到的,这里就不做介绍,因为,我也搞不清楚,但是最终的联合概率计算公式却是如此的简单,以至于,我们完全不需要知道是如何推导出来的
标签:正常,概率,贝叶斯,---,垃圾邮件,垃圾,发票,邮件 From: https://blog.51cto.com/u_15948370/6027571