首页 > 其他分享 >神奇的贝叶斯---垃圾邮件过滤

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

时间:2023-01-30 18:40:49浏览次数:42  
标签:正常 概率 贝叶斯 --- 垃圾邮件 垃圾 发票 邮件


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

        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

相关文章

  • 神奇的贝叶斯定理(一)
    贝叶斯定理看起来是如此的简单,但却有着神奇的功效,这非常符合国人治病求医的思维模式---偏方治百病,但贝叶斯不是偏方,它虽然小,却很美P(B|A)=P(A|B)P(B)/P(A)  上面就是贝......
  • 0134-Go-读取文件
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/reading-files目标使用Go语言读取文件。示例packagemainimport("bufio""fmt......
  • 0135-Go-写入文件
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/writing-files目标使用Go语言写入文件。示例packagemainimport("bufio""fmt......
  • MySQL基础-SQL-DDL
    1.SQL通用语法1.SQL语句可以单行或多行书写,以分号结尾。 2.SQL语句可以使用空格/缩进来增强语句的可读性。 3.MySQL数据库的SQL语句不区分大小写,关键......
  • 0136-Go-行过滤器
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/line-filters目标使用Go语言行过滤器。示例packagemainimport("bufio""fmt"......
  • 0137-Go-文件路径
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/file-paths目标使用Go语言处理文件路径。示例packagemainimport("fmt""path......
  • Docker-compose容器编排
    一、Docker-compose简介Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(s......
  • Django django-rest-framework-simplejwt
    Django(75)django-rest-framework-simplejwt「建议收藏」发布于2022-09-1611:56:13阅读 2440 大家好,又见面了,我是你们的朋友全栈君。 前言由于之前我们一......
  • 生物-云笔记
    细胞器的分工合作分离细胞器——差速离心法第一次取上清液细胞→破碎→低转速→提高转速离心原理:细胞器重量不等细胞器的结构与功能名称结构功能分布线......
  • 《Vue.js 设计与实现》读书笔记 - 第5章、非原始值的响应式方案
    第5章、非原始值的响应式方案5.1理解Proxy和ReflectProxyProxy只能代理对象,不能代理非对象原始值,比如字符串。Proxy会拦截对对象的基本语义,并重新定义对象的基......