JR 精品文章 - 贝叶斯算法研究
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java语言深入 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
贝叶斯算法研究
wty_703 原创   更新:2007-09-27 08:33:32  版本: 1.0   

贝叶斯介绍 

  

贝叶斯是基于概率的一种算法,是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 

  

由此可推出该邮件为非垃圾邮件。 

  

四、   总结 

  

叶斯过滤器为什么能够工作得这么好呢?因为贝叶斯过滤器纯粹根据统计学规律运作,比起那些需要分析邮件句法或内容含义的过滤器来显然要简单的多,而且可计算性强得多。更重要的是,这些标记完全可以由用户根据自己所接收的垃圾邮件和非垃圾邮件来创建,因而可以获得一种对用户来说独一无二的过滤器。这意味着垃圾邮件发送者根本无法猜测出你的过滤器是如何配置的,从而有效地阻截住各类垃圾邮件。 

  

不过,尽管贝叶斯过滤器非常有效,但它仍需要进行优化才能真正完美。比如它可以结合 “白名单”降低误报率,结合“黑名单”降低漏过率,还可以利用其他技术如源址认证使其成为更加精确的垃圾邮件过滤器。


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     18       0
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: JAVA之精髓IO流 上一篇文章
返回文章列表 返回〔Java语言深入〕
下一篇文章 主题: String连接操作比StringBuffer产生更多的对象吗?


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号