贝叶斯推断及其互联网应用(二):过滤垃圾邮件

2023-10-31

上一次,我介绍了贝叶斯推断的原理,今天讲如何将它用于垃圾邮件过滤。

========================================

贝叶斯推断及其互联网应用

作者:阮一峰

(接上文)

七、什么是贝叶斯过滤器?

垃圾邮件是一种令人头痛的顽症,困扰着所有的互联网用户。

正确识别垃圾邮件的技术难度非常大。传统的垃圾邮件过滤方法,主要有"关键词法"和"校验码法"等。前者的过滤依据是特定的词语;后者则是计算邮件文本的校验码,再与已知的垃圾邮件进行对比。它们的识别效果都不理想,而且很容易规避。

2002年,Paul Graham提出使用"贝叶斯推断"过滤垃圾邮件。他说,这样做的效果,好得不可思议。1000封垃圾邮件可以过滤掉995封,且没有一个误判。

另外,这种过滤器还具有自我学习的功能,会根据新收到的邮件,不断调整。收到的垃圾邮件越多,它的准确率就越高。

八、建立历史资料库

贝叶斯过滤器是一种统计学过滤器,建立在已有的统计结果之上。所以,我们必须预先提供两组已经识别好的邮件,一组是正常邮件,另一组是垃圾邮件。

我们用这两组邮件,对过滤器进行"训练"。这两组邮件的规模越大,训练效果就越好。Paul Graham使用的邮件规模,是正常邮件和垃圾邮件各4000封。

"训练"过程很简单。首先,解析所有邮件,提取每一个词。然后,计算每个词语在正常邮件和垃圾邮件中的出现频率。比如,我们假定"sex"这个词,在4000封垃圾邮件中,有200封包含这个词,那么它的出现频率就是5%;而在4000封正常邮件中,只有2封包含这个词,那么出现频率就是0.05%。(【注释】如果某个词只出现在垃圾邮件中,Paul Graham就假定,它在正常邮件的出现频率是1%,反之亦然。这样做是为了避免概率为0。随着邮件数量的增加,计算结果会自动调整。)

有了这个初步的统计结果,过滤器就可以投入使用了。

九、贝叶斯过滤器的使用过程

现在,我们收到了一封新邮件。在未经统计分析之前,我们假定它是垃圾邮件的概率为50%。(【注释】有研究表明,用户收到的电子邮件中,80%是垃圾邮件。但是,这里仍然假定垃圾邮件的"先验概率"为50%。)

我们用S表示垃圾邮件(spam),H表示正常邮件(healthy)。因此,P(S)和P(H)的先验概率,都是50%。

然后,对这封邮件进行解析,发现其中包含了sex这个词,请问这封邮件属于垃圾邮件的概率有多高?

我们用W表示"sex"这个词,那么问题就变成了如何计算P(S|W)的值,即在某个词语(W)已经存在的条件下,垃圾邮件(S)的概率有多大。

根据条件概率公式,马上可以写出

公式中,P(W|S)和P(W|H)的含义是,这个词语在垃圾邮件和正常邮件中,分别出现的概率。这两个值可以从历史资料库中得到,对sex这个词来说,上文假定它们分别等于5%和0.05%。另外,P(S)和P(H)的值,前面说过都等于50%。所以,马上可以计算P(S|W)的值:

因此,这封新邮件是垃圾邮件的概率等于99%。这说明,sex这个词的推断能力很强,将50%的"先验概率"一下子提高到了99%的"后验概率"。

十、联合概率的计算

做完上面一步,请问我们能否得出结论,这封新邮件就是垃圾邮件?

回答是不能。因为一封邮件包含很多词语,一些词语(比如sex)说这是垃圾邮件,另一些说这不是。你怎么知道以哪个词为准?

Paul Graham的做法是,选出这封信中P(S|W)最高的15个词,计算它们的联合概率。(【注释】如果有的词是第一次出现,无法计算P(S|W),Paul Graham就假定这个值等于0.4。因为垃圾邮件用的往往都是某些固定的词语,所以如果你从来没见过某个词,它多半是一个正常的词。)

所谓联合概率,就是指在多个事件发生的情况下,另一个事件发生概率有多大。比如,已知W1和W2是两个不同的词语,它们都出现在某封电子邮件之中,那么这封邮件是垃圾邮件的概率,就是联合概率。

在已知W1和W2的情况下,无非就是两种结果:垃圾邮件(事件E1)或正常邮件(事件E2)。

其中,W1、W2和垃圾邮件的概率分别如下:

如果假定所有事件都是独立事件(【注释】严格地说,这个假定不成立,但是这里可以忽略),那么就可以计算P(E1)和P(E2):

又由于在W1和W2已经发生的情况下,垃圾邮件的概率等于下面的式子:

将P(S)等于0.5代入,得到

将P(S|W1)记为P1,P(S|W2)记为P2,公式就变成

这就是联合概率的计算公式。如果你不是很理解,点击这里查看更多的解释。

十一、最终的计算公式

将上面的公式扩展到15个词的情况,就得到了最终的概率计算公式:

一封邮件是不是垃圾邮件,就用这个式子进行计算。这时我们还需要一个用于比较的门槛值。Paul Graham的门槛值是0.9,概率大于0.9,表示15个词联合认定,这封邮件有90%以上的可能属于垃圾邮件;概率小于0.9,就表示是正常邮件。

有了这个公式以后,一封正常的信件即使出现sex这个词,也不会被认定为垃圾邮件了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贝叶斯推断及其互联网应用(二):过滤垃圾邮件 的相关文章

  • 海森矩阵及其应用

    海森矩阵及其应用 转载 2017年04月20日 09 59 48 标签 梯度下降算法 微积分 牛顿迭代法 原文参考链接 here 原文讲得到很详细 海森矩阵 在数学中 海森矩阵 Hessian matrix或Hessian 是一个自变量为向
  • 离散余弦变换

    离散余弦变换 DCT for Discrete Cosine Transform 是与傅里叶变换相关的一种变换 它类似于离散傅里叶变换 DFT for Discrete Fourier Transform 但是只使用实数 离散余弦变换相当于
  • 贝叶斯推断及其互联网应用(二):过滤垃圾邮件

    上一次 我介绍了贝叶斯推断的原理 今天讲如何将它用于垃圾邮件过滤 贝叶斯推断及其互联网应用 作者 阮一峰 接上文 七 什么是贝叶斯过滤器 垃圾邮件是一种令人头痛的顽症 困扰着所有的互联网用户 正确识别垃圾邮件的技术难度非常大 传统的垃圾邮件
  • 证明sinx/x的极限等于1(x趋向于0)

    洛比达法则 上下都对x求导 得1 cosx 1
  • 逆矩阵(inverse matrix)的概念及其意义

    逆矩阵 inverse matrix 的概念及其意义 2015年09月17日 00 09 10 阅读数 21838 标签 逆矩阵为何需要逆矩阵逆矩阵应用逆矩阵实例逆矩阵与倒数 更多 版权声明 本文为博主原创文章 未经博主允许不得转载 htt
  • 时域和空域和频域

    傅立叶变换是f t 乘以正弦项的展开 正弦项的频率由u 其实是miu 的值决定 因为积分后左边剩下的为一变量是频率 所以我们说傅立叶变换域是频率域 数字图像处理 冈萨雷斯 中文第三版P128 当变量t用于说明图像时 我们一般将变量t的域称为
  • 极限导数练习题

    f x sinx 2 x 当x趋近于0时 f x 的极限是0 f x sin x 2 x 当x趋近于0时 f x 的极限是0 f x sin 2x x 当x趋近于0时 f x 的极限是2
  • python 之pulp 线性规划介绍及举例

    原文 https www cnblogs com shizhenqiang p 8274806 html 安装 conda install pulp pulp http pythonhosted org PuLP main basic py
  • 凸函数性质习题

    试题专页 1题文 考试题提前练 gt 戳这 凸函数的性质定理为 如果函数f x 在区间D上是凸函数 则对于区间D内的任意x1 x2 xn 有 f x1 f x2 f xn n f x1 x2 xn n 已知函数y sinx在区间 0 上是凸
  • 相关系数,互相关函数,协方差,卷积

    X t 为随机过程 a t E X t 为期望 Y t 为另一随机过程 自相关函数的定义为 R s t E X s X t 互相关函数的定义为 R s t E X s Y t 事实上 在图象处理中 自相关和互相关函数的定义如下 设原函数是f
  • 世界上最完美的公式 ----欧拉公式

    欧拉公式 在数学历史上有很多公式都是欧拉 leonhard euler 公元1707 1783年 发现的 它们都叫做 欧拉公式 它们分散在各个数学分支之中 1 分式里的欧拉公式 a r a b a c b r b c b a c r c a
  • 线性回归最小二乘法和梯度下降法-详细

    原文 https blog csdn net y990041769 article details 69567838 问题描述 首先我们定义问题 线性回归要解决的问题就是根据给出的数据学习出一个线性模型 例如我们最常说的身高和体重的关系 以
  • java实现高斯赛德尔算法解线性方程组

    package linear equation import java util Scanner 使用高斯赛德尔迭代法求解线性方程组 public class Gauss Seidel Iterate 求下三角 private static
  • 协方差矩阵的几何解释

    A geometric interpretation of the covariance matrix http www visiondummy com 2014 04 geometric interpretation covariance
  • 自然对数e的来历

    e是自然对数的底数 是一个无限不循环小数 其值是2 71828 是这样定义的 当n gt 时 1 1 n n的极限 注 x y表示x的y次方 随着n的增大 底数越来越接近1 而指数趋向无穷大 那结果到底是趋向于1还是无穷大呢 其实 是趋向于
  • 对数和指数

    参考 https www zhihu com question 21453993 这就相当于先发明减法符号 再发明加法符号 1614年 纳皮尔发明了对数和对数表 1637年 法国数学家笛卡儿发明了指数 比对数晚了20多年 1770年 欧拉才
  • 2的31次方和3的21次方哪个大,123组成最大的数是多少?

    123这三个数字组成最大的数是什么数 面试官告诉小孙 123这三个数字组成最大的数是什么数 我希望你能够在5分钟之内回答出来 小孙当时连想都没有想 123组成的最大数字 当然就是123了 当小孙把这个答案告诉面试官的时候 面试官摇摇头 然后
  • 特征值和特征向量的几何和物理意义

    原文 http blog 163 com renguangqian 126 blog static 1624014002011711114526759 FUCk 相见很晚 如果大学期间遇到这样的文章 线代必须90分以上 特征值和特征向量的几
  • 逻辑回归原理(python代码实现)

    原文 https blog csdn net csqazwsxedc article details 69690655 Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程 为最大化方
  • 协方差矩阵的实例与意义

    协方差矩阵的实例与意义 在机器学习中经常需要计算协方差矩阵 本科时没学过这个概念 一直对此非常头疼 现在试图通过实例的计算 图形化的表示来梳理一下什么是协方差矩阵 A numerical example 问题 有一组数据 如下 分别为二维向

随机推荐

  • 使用MySQL8.0以上版本和MySQL驱动包8.0以上出现的问题

    目录 1 时区问题 2 驱动程序类问题 1 时区问题 问题代码
  • dll,lib,.a,.so的联系与区别。什么是共享库?与dll的区别是什么?

    dll lib a so的联系与区别 什么是共享库 与dll的区别是什么 区别与联系 静态库与动态库 问题 疑问 什么是共享存档 其他内容 map pdb 文件 区别与联系 本文结合所学和理解进行简单了描述dll与lib a so文件的关系
  • IBatis.net介绍

    从上而下的理解IBatis net这个简易的ORM框架 1 DAL层 public class AccountService public int TestInsertOne Accounts account Object obj Mapp
  • 基于QT开发的截图工具

    概述 这是一个使用QT设计的截图工具 目前效果图 历程 意动 现在网上免费的截图工具很多 最近用了一款很不错的 叫Snipaste 这个软件就是基于QT开发的 不过并没有开源 软件设计的很好用 界面也很清新 于是我也想自己尝试这设计一个这样
  • Oracle 性能最大化

    配置和优化有什么不同 获得最大的性能 配置操作系统 配置Oracle Oracle 性能 调整和配置数据库对象 优化Oracle 最大化 如果你问很多Oracle DBA 你工作中最大的一部分是什么 几乎所有的回答都是 数据库的配置和优化
  • google cartographer参数配置和话题转发

    为了对google cartographer进行实验仿真 安装完成后首先用官方rosbag进行实验没问题后再尝试用自己的rosbag文件 重要的参考资料 https google cartographer ros readthedocs i
  • win10安装TeXLive2019

    下载安装包 到TeX Live官网下载iso安装包 Acquiring TeX Live as an ISO image 点击上图中的链接 会根据网络选择合适的镜像 方便我们下载 我的镜像是上海交通大学的 http mirrors sjtu
  • Pytorch 图像增强 实现翻转裁剪色调等 附代码(全)

    目录 前言 1 裁剪 1 1 中心裁剪 1 2 随机裁剪 1 3 随机尺寸裁剪 2 翻转 2 1 水平翻转 2 2 垂直翻转 2 3 随机旋转 3 色调 3 1 灰度变换 3 2 色彩抖动 3 3 随机翻转颜色 3 4 随机调整锐度 3 5
  • 微信 支付和回调

    1 微信支付 兼容小程序 app h5等方式 RequestMapping value recharge getSign public JSONMessage getSign RequestParam int payType Request
  • Ubuntu 20.04虚拟机开机卡在 /dev/sda* clean ,针对AMD核显的解决办法

    问题描述如标题 此类问题存在的普遍解释是 1 存储空间不足 2 显卡驱动问题 因此在解决问题之前需要先判断自己的问题 首先重启 开机时按Esc建 进入Grub界面 选择第一个选项Ubuntu 之后选择Advanced options for
  • Java中的数据库连接--JDBC

    JDBC Java DataBase Connectivity 即Java数据库连接 就是使用Java语言操作数据库 JDBC的本质 官方定义的定义的一套操作所有关系型数据库的规则 即接口 这边使用MySQL数据库进行测试 1 快速入门 首
  • 非常有趣的的免费API接口,基本上很全了

    一 图灵聊天机器人 http doc tuling123 com openapi2 263611 二 百度地图开放平台 http lbsyun baidu com index php title webapi 三 Eolinker API
  • 【吐血整理】mysql密码正确但无法登陆

    一面 1 二叉搜索树和平衡二叉树有什么关系 强平衡二叉树 AVL 树 和弱平衡二叉树 2 B 树和 B 树的区别 为什么 MySQL 要使用 B 树 3 HashMap 如何解决 Hash 冲突 4 epoll 和 poll 的区别 及其应
  • C++ 语言的单元测试与代码覆盖率

    点击蓝字 关注我们 来源于网络 侵删 前言 测试是软件开发过程中一个必须的环节 测试确保软件的质量符合预期 对于工程师自己来说 单元测试也是提升自信心的一种方式 直接交付没有经过测试的代码是不太好的 因为这很可能会浪费整个团队的时间 在一些
  • Mysql 的安装与配置

    一 windows 服务器下的 mysql 1 安装软件安装 按软件提示一路确定下去 2 压缩包安装 1 解压安装包到自定义路径 2 修改 my ini 配置文件 复制解压好的文件路径 记事本打开 my ini 文件 将basedir 与
  • tie-aware的检索指标

    检索常用指标 P precision R recall F1 AP average precision RR reciprocal rank NDCG normalized discounted cumulative gain ACG av
  • 我对GPIO的的理解

    首先 要先说下GPIO和引脚的区别 整理下网上提出的问题和答案 GPIO的英文全称General Purpose Input Output Ports 中文意思是通用I O端口 在单片机上 单片机有很多管脚 PIN 除了一些特殊的PIN 比
  • 深入理解CAS算法原理

    转载自 深入理解CAS算法原理 https mp weixin qq com s biz MzI3ODcxMzQzMw mid 2247483728 idx 1 sn 3d734dc972a244891406cfbc443eabed chk
  • sugarcrm mysql_SugarCRM安装踩雷(一)

    安装SugarCRM前置条件 1 找对平台 正确版本的安装包 2 APACHE MYSQL TOMCAT环境先确保OK 坑1 进入安装参数设置步骤的MYSQL用户密码 这里根据Mysql的登陆用户名和密码来填写 如果不是单独安装的Mysql
  • 贝叶斯推断及其互联网应用(二):过滤垃圾邮件

    上一次 我介绍了贝叶斯推断的原理 今天讲如何将它用于垃圾邮件过滤 贝叶斯推断及其互联网应用 作者 阮一峰 接上文 七 什么是贝叶斯过滤器 垃圾邮件是一种令人头痛的顽症 困扰着所有的互联网用户 正确识别垃圾邮件的技术难度非常大 传统的垃圾邮件