朴素贝叶斯

使用朴素贝叶斯进行文档分类
机器学习的一个重要应用就是文档的自动分类。在文档分类中,整个文档(如一封电子邮件) 是实例,而电子邮件中的某些元素则构成特征。虽然电子邮件是一种会不断增加的文本,但我们同 样也可以对新闻报道、用户留言、政府公文等其他任意类型的文本进行分类。我们可以观察文档中 出现的词,并把每个词的出现或者不出现作为一个特征,这样得到的特征数目就会跟词汇表中的词 目一样多。朴素贝叶斯是上节介绍的贝叶斯分类器的一个扩展,是用于文档分类的常用算法。 使用每个词作为特征并观察它们是否出现,这样得到的特征数目会有多少呢?针对的是哪一 种人类语言呢?当然不止一种语言。据估计,仅在英语中,单词的总数就有500 000①之多。为了 能进行英文阅读,估计需要掌握数千单词。

朴素贝叶斯的一般过程
(1) 收集数据:可以使用任何方法。本章使用RSS源。 (2) 准备数据:需要数值型或者布尔型数据。 (3) 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。 (4) 训练算法:计算不同的独立特征的条件概率。 (5) 测试算法:计算错误率。 (6) 使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴 素贝叶斯分类器,不一定非要是文本。

假设词汇表中有1000个单词。要得到好的概率分布,就需要足够的数据样本,假定样本数为 N。前面讲到的约会网站示例中有1000个实例,手写识别示例中每个数字有200个样本,而决策树 示例中有24个样本。其中,24个样本有点少,200个样本好一些,而1000个样本就非常好了。约 会网站例子中有三个特征。由统计学知,如果每个特征需要N个样本,那么对于10个特征将需要 N10个样本,对于包含1000个特征的词汇表将需要N1000个样本。可以看到,所需要的样本数会随 着特征数目增大而迅速增长。 如果特征之间相互独立,那么样本数就可以从N1000减少到1000×N。所谓独立(independence) 指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系。举 个例子讲,假设单词bacon出现在unhealthy后面与出现在delicious后面的概率相同。当然,我们知 道这种假设并不正确,bacon常常出现在delicious附近,而很少出现在unhealthy附近,这个假设正 是朴素贝叶斯分类器中朴素(naive)一词的含义。朴素贝叶斯分类器中的另一个假设是,每个特征同等重要①。其实这个假设也有问题。 如果要判断留言板的留言是否得当,那么可能不需要看 完所有的1000个单词,而只需要看10~20个特征就足以做出判断了。尽管上述假设存在一些小的 瑕疵,但朴素贝叶斯的实际效果却很好。 到目前为止,你已经了解了足够的知识,可以开始编写代码了。如果还不清楚,那么了解代 码的实际效果会有助于理解。下一节将使用Python来实现朴素贝叶斯分类器,实现中会涉及利用 Python进行文本分类的所有相关内容。

使用Python进行文本分类
要从文本中获取特征,需要先拆分文本。具体如何做呢?这里的特征是来自文本的词条 (token),一个词条是字符的任意组合。可以把词条想象为单词,也可以使用非单词词条,如URL、 IP地址或者任意其他字符串。然后将每一个文本片段表示为一个词条向量,其中值为1表示词条 出现在文档中,0表示词条未出现。 以在线社区的留言板为例。为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一 个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。过 滤这类内容是一个很常见的需求。对此问题建立两个类别:侮辱类和非侮辱类,使用1和0分别表示。 接下来首先给出将文本转换为数字向量的过程,然后介绍如何基于这些向量来计算条件概率, 并在此基础上构建分类器,后还要介绍一些利用Python实现朴素贝叶斯过程中需要考虑的问题。
准备数据:从文本中构建词向量
我们将把文本看成单词向量或者词条向量,也就是说将句子转换为向量。考虑出现在所有文 档中的所有单词,再决定将哪些词纳入词汇表或者说所要的词汇集合,然后必须要将每一篇文档 转换为词汇表上的向量。接下来我们正式开始。打开文本编辑器,创建一个叫bayes.py的新文件, 然后将下面的程序清单添加到文件中。

示例:使用朴素贝叶斯对电子邮件进行分类
(1) 收集数据:提供文本文件。 (2) 准备数据:将文本文件解析成词条向量。 (3) 分析数据:检查词条确保解析的正确性。 (4) 训练算法:使用我们之前建立的trainNB0()函数。 (5) 测试算法:使用classifyNB(),并且构建一个新的测试函数来计算文档集的错误率。 (6) 使用算法:构建一个完整的程序对一组文档进行分类,将错分的文档输出到屏幕上。

本章小结
对于分类而言,使用概率有时要比使用硬规则更为有效。贝叶斯概率及贝叶斯准则提供了一 种利用已知值来估计未知概率的有效方法。 可以通过特征之间的条件独立性假设,降低对数据量的需求。独立性假设是指一个词的出现 概率并不依赖于文档中的其他词。当然我们也知道这个假设过于简单。这就是之所以称为朴素贝 叶斯的原因。尽管条件独立性假设并不正确,但是朴素贝叶斯仍然是一种有效的分类器。 利用现代编程语言来实现朴素贝叶斯时需要考虑很多实际因素。下溢出就是其中一个问题, 它可以通过对概率取对数来解决。词袋模型在解决文档分类问题上比词集模型有所提高。还有其 他一些方面的改进,比如说移除停用词,当然也可以花大量时间对切分器进行优化。 本章学习到的概率理论将在后续章节中用到,另外本章也给出了有关贝叶斯概率理论全面具 体的介绍。接下来的一章将暂时不再讨论概率理论这一话题,介绍另一种称作Logistic回归的分 类方法及一些优化算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值