贝叶斯分类算法在文本过滤中的应用
贝叶斯公式的应用可谓相当广泛,在机器学习中,最常用来作为分类器使用。同时,在垃圾邮件过滤方面贝叶斯分类器也有十分不错的表现^_^。好奇的同学,可以找找自己的foxmail中,也有贝叶斯分类器的选项。
之前,笔者曾经谈到过正在开发的一款软件 网站发布机 其中需要将采集后抽取到正文的进行过滤处理,滤除与文章无关的,例如:页脚版权声明,连续的英文字符串等等。尝试了很多方法,均告失败=_=! ,直到看到一篇使用贝叶斯公式过滤垃圾邮件的论文,思路才明晰起来。能否利用同样的原理来对文本进行过滤呢?笔者也对方案的可行性做了一些分析。
贝叶斯垃圾邮件过滤的原理
贝叶斯算法是以著名数学家托马斯.贝叶斯(Thomas 贝叶斯)(1702-1761)命名的一种基于概率分析的可能性推理理论,通过分析过去事件的知识,来预测未来的事件。
贝叶斯过滤法对大量用户已经判定的垃圾邮件和合法邮件进行学习,根据垃圾邮件和合法邮件中相同词语及短语出现的概率对比来确定垃圾邮件的可能性。
贝叶斯过滤法可以通过不断地学习来适应垃圾邮件的新规则。贝叶斯过滤法是阻断垃圾邮件最为精确的技术之一,过滤准确率可以达到99%,但过滤准确性依赖大量的历史数据。
贝叶斯文本过滤器的构建
根据某砖家^_^文献提供的算法,同理可以构建一个基于贝叶斯垃圾邮件过滤的文本过滤器,假设现在有两个文本集,一个为正常文本集,另一个为垃圾文本集;分别在集合的基础上建立两个哈希表,用于统计出现在相关语料库中的词和词频。计算每个关键词的概率,使用如下公式:
其中b代表该关键词在垃圾文本集中出现的次数,g代表该关键词在正常文本集中出现的次数,nbad代表垃圾文本的总数,ngood代表正常文本的总数。在分母中的系数2是一个推荐的经验值,用于减少把正常文本当作垃圾文本的概率。
在计算联合概率时使用如下公式:
通过笔者的简单验证,这个方法时可行的。但是难点时贝叶斯公式一般需要一个先验概率也就是 公式1 中的数值。因此,需要手工建立一个训练文本集,这个文本集包括正常文本和垃圾文本两类,相当费时,费力=_=。在目前没有更好的解决方法之前只好用它了,希望能有个好的实验结果^_^
今天下午花了不少时间完成算法代码的编写工作,特征项提取的算法还在研究中,需要在信息增益、互信息等常用特征选择算法中找个不错的答案,继续努力了^_^