0
点赞
收藏
分享

微信扫一扫

神奇的贝叶斯---垃圾邮件过滤


        使用贝叶斯进行垃圾邮件过滤的原理很简单,假如我们在邮件中发现一个词--“发票”,那么就根据这个词来计算这封邮件是垃圾邮件的概率

        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))

      公式是如何推到的,这里就不做介绍,因为,我也搞不清楚,但是最终的联合概率计算公式却是如此的简单,以至于,我们完全不需要知道是如何推导出来的

      

       

举报

相关推荐

朴素贝叶斯

0 条评论