作者:钟伟海

2016-04-01

一、 贝叶斯反垃圾邮件技术介绍
  贝叶斯是基于概率的一种算法,是Thomas Bayes:一位伟大的数学大师所创建的,目前此种算法用于过滤垃圾邮件得到了广泛地好评。贝叶斯过滤器是基于“自我学习”的智能技术,能够使自己适应垃圾邮件制造者的新把戏,同时为合法电子邮件提供保护。在智能邮件过滤技术中,贝叶斯(Bayesian)过滤技术取得了较大的成功,被越来越多地应用在反垃圾邮件的产品中。
二、 贝叶斯过滤算法的基本步骤

  1. 收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
  2. 提取邮件主题和邮件体中的独立字符串,例如 ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
  3. 每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。
  4. 计算每个哈希表中TOKEN串出现的概率P=(某TOKEN串的字频)/(对应哈希表的长度)
  5. 综合考虑hashtable_good和hashtable_bad,推断出当新来的邮件中出现某个TOKEN串时,该新邮件为垃圾邮件的概率。数学表达式为:
  A 事件 ---- 邮件为垃圾邮件;
  t1,t2 …….tn 代表 TOKEN 串
  则 P ( A|ti )表示在邮件中出现 TOKEN 串 ti 时,该邮件为垃圾邮件的概率。
  设
  P1 ( ti ) = ( ti 在 hashtable_good 中的值)
  P2 ( ti ) = ( ti 在 hashtable_ bad 中的值)
  则 P ( A|ti ) =P2 ( ti ) /[ ( P1 ( ti ) +P2 ( ti ) ] ;

  6. 建立新的哈希表hashtable_probability存储TOKEN串ti到P(A|ti)的映射
  7. 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。
  当新到一封邮件时,按照步骤2,生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。
  假设由该邮件共得到N个TOKEN 串,t1,t2…….tn,hashtable_probability中对应的值为 P1 , P2 , ……PN , P(A|t1 ,t2, t3……tn) 表示在邮件中同时出现多个TOKEN串t1,t2……tn时,该邮件为垃圾邮件的概率。
  由复合概率公式可得
  P(A|t1 ,t2, t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]
  当 P(A|t1 ,t2, t3……tn) 超过预定阈值时,就可以判断邮件为垃圾邮件。

三、 贝叶斯过滤算法举例
  例如:一封含有 “ 法无效字符轮无效字符功 ” 字样的垃圾邮件 A 和一封含有 “ 法无效字符律 ” 字样的非垃圾邮件 B 。 根据邮件 A 生成 hashtable_bad ,该哈希表中的记录为
  法: 1 次
  无效字符轮: 1 次
  无效字符功: 1 次
  计算得在本表中:
  无效字符法出现的概率为 0.3
  无效字符轮出现的概率为 0.3
  无效字符功出现的概率为 0.3
  根据邮件B生成hashtable_good,该哈希表中的记录为:
  法: 1 次
  律: 1 次
  计算得在本表中:
  法出现的概率为 0.5
  律出现的概率为 0.5
  综合考虑两个哈希表,共有四个 TOKEN 串:法无效字符论无效字符功无效字符律
  当邮件中出现“法”时,该邮件为垃圾邮件的概率为:
  P = 0.3/ ( 0.3 + 0.5 ) = 0.375
  出现“无效字符轮”时,该邮件为垃圾邮件的概率为:
  P = 0.3/ ( 0.3 + 0 ) = 1
  出现“无效字符功”时,该邮件为垃圾邮件的概率为:
  P = 0.3/ ( 0.3 + 0 ) = 1
  出现“无效字符律”时,该邮件为垃圾邮件的概率为:
  P = 0/ ( 0 + 0.5 ) = 0
  由此可得第三个哈希表 hashtable_probability ,其数据为:
  无效字符法: 0.375
  无效字符轮: 1
  无效字符功: 1
  律: 0
  当新到一封含有“功无效字符律”的邮件时,我们可得到两个TOKEN串:功 律
  查询哈希表 hashtable_probability 可得:
  P (垃圾邮件 | 功) = 1
  P (垃圾邮件 | 律) = 0
  此时该邮件为垃圾邮件的可能性为:
  P= ( 0*1 ) /[0*1+ ( 1-0 ) * ( 1-1 ) ] = 0
  由此可推出该邮件为非垃圾邮件。
四、总结
  叶斯过滤器为什么能够工作得这么好呢?因为贝叶斯过滤器纯粹根据统计学规律运作,比起那些需要分析邮件句法或内容含义的过滤器来显然要简单的多,而且可计算性强得多。更重要的是,这些标记完全可以由用户根据自己所接收的垃圾邮件和非垃圾邮件来创建,因而可以获得一种对用户来说独一无二的过滤器。这意味着垃圾邮件发送者根本无法猜测出你的过滤器是如何配置的,从而有效地阻截住各类垃圾邮件。
  不过,尽管贝叶斯过滤器非常有效,但它仍需要进行优化才能真正完美。比如它可以结合 “白名单”降低误报率,结合“黑名单”降低漏过率,还可以利用其他技术如源址认证使其成为更加精确的垃圾邮件过滤器。

相信很多关注反垃圾邮件的朋友都听说过贝叶斯过滤算法,但是对于贝叶斯过滤算法是如何过滤垃圾邮件却不是很了解,邮件群发网在此就列出它的过滤步骤,如下:

1.收集大量的垃圾邮件和非垃圾邮件,建立不同的集。

2.提取邮件主题和邮件体中的独立字串,然后获取频率。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。

3.每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。

4.计算每个哈希表中关键字符串出现的概率P=(某字频)/(对应哈希表的长度)

5.综合考虑hashtable_good和hashtable_bad,推断出当新邮件中出现某个字串时,该新邮件为垃圾邮件的概率。

6.建立新的哈希表 hashtable_probability

7.至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。

在今天的反垃圾邮件技术中,则融合了以前大部分实用技术的精华,采用权重算法让判断垃圾邮件的工作更精确、更智能。但保守的人们还是不愿把规则设置的过严,因为没有任何一个用户希望把自己正规的邮件当作垃圾邮件处理掉。本文来源于网络。

贝叶斯过滤是根据贝叶斯准则和贝叶斯定理,以已知垃圾邮件和非垃圾邮件为样本,来判断下一封邮件是垃圾邮件的概率的技术。跟普通的内容过滤技术不 同,贝叶斯过滤特征的来源比较多,可以采用邮件正文单词、邮件头信息(发送者、传递路径等)、邮件的HTML编码等作为判断的特征元素,因此对垃圾邮件的 判断能够做到更全面、更准确。更重要的是,贝叶斯过滤还具有自学习功能,能够学习分辨垃圾邮件与非邮件之间的差别,差别是用概率来表示的,并且自动应用到 以后的检测中。在收到几百封信件后,一个好的贝叶斯过滤器就可以自动识别各种垃圾邮件。
  使用贝叶斯算法来进行垃圾邮件过滤的基本步骤是:
  1.收集样本垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集;
  2.在垃圾邮件集和非垃圾邮件集中,提取特征来源中的独立字符串abc,并统计该字符串出现的次数(字频);针对垃圾邮件集和非垃圾邮件集,分别建立哈希表hash_spam和hash_normal,在哈希表中存储特征字符串abc字频的映射关系;
  3.计算每个哈希表中特征字符串abc出现的概率P=(该特征字符串的字频)/(对应哈希表的长度);
  4.综合考虑hash_spam和hash_normal,推断当新接收的邮件中出现特征字符串abc时,该新邮件为垃圾邮件的概率。
  如果:A事件 邮件为垃圾邮件;t1,t2 …….tn代表特征字符串;则P(Ati)表示在邮件中出现TOKEN串ti时,该邮件为垃圾邮件的概率。
  设P1(ti)=ti在hash_spam中的值;P2(ti)=ti在hash_normal中的值;则P(Ati)=P2(ti)/[(P1(ti)+P2(ti)) ;
  5.建立新的哈希表hash_probability存储特征字符串ti到P(Ati)的映射;
  6.根据建立的哈希表hash_probability可以估计一封新到的邮件为垃圾邮件的可能性。
  这样,当接收到一个邮件时,首先按照步骤2生成特征字符串。查询hash_probability得到该字符串的键值。假设由该邮件共得到N个特征字符 串t1,t2…….tn,hashtable_probability中对应的值为P1,P2……PN,P(At1,t2,t3……tn)表示在邮件中同 时出现多个字符串t1,t2……tn时,该邮件为垃圾邮件的概率。
  由复合概率公式可得:
  P(At1,t2,t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]
  当P(At1,t2,t3……tn)超过预定阀值时,就可以判断邮件为垃圾邮件。  当新邮件到达的时候,就通过贝叶斯过滤器分析,通过使用各个特征来计算邮件是垃圾邮件的概率。通过不断的分析,过滤器也不断地获得自更新。如果通过各种特征判断一个包含单词abc的邮件是垃圾邮件,那么单词abc成为垃圾邮件特征的概率就增加了。
   这样,贝叶斯过滤器就有了自适应能力,既能自动进行,也可以用户手工操作,也就更能适应单个用户的使用。而垃圾邮件发送者要获得这样的适应能力就很难 了,因此,很难逃避过滤器的过滤。当然他们还是能够将邮件伪装成很普通的正常邮件样子的。比如,垃圾邮件发送者能去对某个人的过滤器进行判断;又比如,采 用发送回执的办法来了解哪些邮件被用户打开了等,这样他们就可以适应过滤器了。
  设计优良的贝叶斯过滤器,可以识别99.7%以上的垃圾邮件,而且误判率极低,是目前最有效的反垃圾邮件技术。这主要是因为贝叶斯过滤具有以下特点。
   贝叶斯过滤技术对邮件的所有内容进行分析,不仅仅是其中的某个关键词,而且它能判别邮件是垃圾邮件还是正常邮件。例如:包含"free""cash"" 发票"字样的邮件不一定是垃圾邮件,如果采用关键字过滤技术,显然难以达到理想的效果。而贝叶斯过滤技术既考虑了这些词在垃圾邮件中出现的概率、又考虑了 它在正常邮件中的概率,综合考虑这些因素做出判断。可以说,贝叶斯过滤技术具有一定的智能,它对邮件中的关键词能综合地进行评判,可以把握"好"与"坏" 之间的平衡。显然,这种技术远远高于非1即0的静态过滤技术。
  贝叶斯过滤技术具备自适应功能,通过学习新的垃圾邮件及正常邮件样本,它 将能对抗最新的垃圾邮件,并且对变体字有奇效。比如,垃圾邮件发送者开始使用"f-r-e-e"来代替"free"这样能够绕过关键字检查,除非"f- r-e-e"被加到新的关键字中。而对贝叶斯过滤技术而言,当它发现邮件中含有"f-r-e-e"时,由于正常邮件中从来没有发现这个词,因此它是垃圾邮 件的可能性将急剧增加,"f-r-e-e"这个新词无疑成了垃圾邮件的指示器。再比如,垃圾邮件中用5ex代替sex,贝叶斯过滤技术也可推算出它是垃圾 邮件的可能性也急剧增加。
  贝叶斯过滤技术更加个性化。它能学习并理解用户对邮件的偏好。如前所述,"mortgage"抵押一词对软件公司而言意味着垃圾,但对金融类公司则意味着邮件。贝叶斯过滤技术能根据用户的这种偏好进行处理。
  贝叶斯过滤技术支持多语种或者说与编码无关。这是因为它分析的是字串,无论是数字、词、符号、还是别的什么,当然与语言无关。
   贝叶斯过滤器很难被欺骗。垃圾邮件发送高手通常通过减少垃圾词汇(如free、viagra、发票)或者在信中多加入一些好的词汇(如合同、文件)来绕 过一般的邮件内容检查,但由于贝叶斯过滤技术具有个性化的色彩,要想成功地绕过它的检查,就不得不对每个收件人的偏好进行研究,这简直是"不可能完成的任 务",垃圾邮件发送者是无法容忍的。若采用变化字,则如前所述,贝叶斯过滤技术判断其为垃圾邮件的可能性反而增加。
  实践也证明,贝叶斯过滤器在用户端和服务器中效果是非常明显的,如优秀的贝叶斯过滤器能够识别超过99.9%的垃圾邮件。

贝叶斯算法(bayesian)在反垃圾邮件中的应用相关推荐

  1. 贝叶斯算法应用于反垃圾邮件

    对抗垃圾邮件的技术有很多,今天学习的贝叶斯算法属于一种机器学习领域的技术.这是一种分类算法,根据贝叶斯原理来计算邮件可能是垃圾邮件的概率,如果高于阈值,就认为这是垃圾邮件.其判断的准确程度随着学习次数 ...

  2. 【机器学习】贝叶斯算法详解 + 公式推导 + 垃圾邮件过滤实战 + Python代码实现

    文章目录 一.贝叶斯简介 二.贝叶斯公式推导 三.拼写纠正案例 四.垃圾邮件过滤案例 4.1 问题描述 4.2 朴素贝叶斯引入 五.基于朴素贝叶斯的垃圾邮件过滤实战 5.1 导入相关库 5.2 邮件数 ...

  3. 朴素贝叶斯算法代码实现(垃圾邮件检测)

    1.文本预处理 (1)分词 首先需要对文本进行分词操作,转换为list,同时词语全部小写,并去除字母数量小于等于2的单词 # 将词切分为list def textParse(input_string) ...

  4. 详解:贝叶斯算法(bayesian)在GCMail反垃圾邮件系统中的应用

    贝叶斯在在反垃圾邮件的产品中应用很多,也是当前最好的反垃圾邮件算法,著名的卡巴斯基病毒库代码就是采用贝叶斯过滤算法,在目前的邮件系统中采用贝叶斯过滤算法的唯有GCMAil邮件服务器.下面我就对贝叶斯反 ...

  5. 贝叶斯算法(bayesian)介绍

    贝叶斯是基于概率的一种算法,是Thomas Bayes:一位伟大的数学大师所创建的,目前此种算法用于过滤垃圾邮件得到了广泛地好评.贝叶斯过滤器是基于"自我学习"的智能技术,能够使自 ...

  6. postfix 反垃圾邮件中使用 RBL

    首先说一下 什么是RBL RBL是英文Realtime Blackhole List的缩写,即实时黑名单列表.在该列表中的IP地址对外发布过垃圾邮件.因此,它象病毒定义文件一样被垃圾邮件过滤器用于过滤 ...

  7. 基于贝叶斯算法的邮件过滤管理系统的设计和实现(Vue+SpringBoot)

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  8. 贝叶斯反垃圾邮件技术

    一. 贝叶斯反垃圾邮件技术介绍 贝叶斯是基于概率的一种算法,是Thomas Bayes:一位伟大的数学大师所创建的,目前此种算法用于过滤垃圾邮件得到了广泛地好评.贝叶斯过滤器是基于"自我学习 ...

  9. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  10. Python数据分析与机器学习实战<十>贝叶斯算法

    目录 贝叶斯算法概述 贝叶斯要解决的"逆概"问题 正向概率: 逆向概率:(也就是贝叶斯解决的问题) 为什么使用贝叶斯? 贝叶斯推导实例 贝叶斯公式 贝叶斯--"拼写纠正& ...

最新文章

  1. 多传感器融合:自动驾驶(下)
  2. 多个勒索软件团伙利用VMware的Log4Shell漏洞
  3. 第一章·MySQL介绍及安装
  4. 实验吧---隐写术之男神一般都是很低调的!
  5. kotlin 类及其成员的可见性
  6. 6.19决战光荣日,一场魔兽狂欢里的青春、父爱和友谊
  7. 关于Metasploit开发环境的搭建
  8. windows绕开强制更新
  9. iPhone 14“感叹号”设计没跑:屏下Face ID要等到2024年
  10. Java中根据URL下载gif图片文件
  11. 了解java虚拟机---JVM的基本结构(1)
  12. 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
  13. C++多线程编程(真实入门)
  14. 【Pytorch官方教程】从零开始自己搭建RNN2 - 字母级RNN的生成任务
  15. 阿里云物联网平台使用笔记(一)——利用云产品流转关联两个设备的数据
  16. 子域名收集 -- 提莫(teemo)
  17. 无需安卓手游模拟器,电脑玩绝地求生:全军出击TC Games完美匹配手游服
  18. apk自行修改后的操作(软件安装不了,安了打不开,闪退)
  19. 阿里云物联网平台MQTT教程
  20. 【运筹学】对偶理论 : 互补松弛性 ( 定理内容 | 定理证明 )

热门文章

  1. 【houdini hom】弹砖块
  2. 线上靶机prompt.ml
  3. .Net使用FlashPaper
  4. FlashPaper组件——api
  5. FlashPaper Win2003部署
  6. 2022 火狐插件 Tamper Data 下载安装使用教程
  7. 一位硕士毕业生三个月求职经历与经验结晶【转帖】
  8. 记录安装Node.js一直提示:The feature you are trying to use is on a network resource
  9. 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了解更多信息。
  10. vue渲染大量数据优化_Vue列表页渲染优化详解