机器学习教程:朴素贝叶斯文本分类器

在本教程中,我们将讨论朴素贝叶斯文本分类器。朴素贝叶斯是最简单的分类器之一,只涉及简单的数学表达,并且可以使用PHP,C#,JAVA等语言进行编程。

更新:基于Java的开源机器学习框架Datumbox,可以免费下载。可通过com.datumbox.framework.machinelearning.classification包来查看朴素贝叶斯分类器的Java实现。

请注意,下面介绍的技术将通过Datumbox的文本分析服务启动我们的API

什么是朴素贝叶斯分类器?

朴素贝叶斯分类器是一个以贝叶斯定理为基础的较简单的概率分类器,其中naïve(朴素)指这种方法的思想很简单:假定条件特征之间具有强独立性。它是最基本的文本分类技术之一,应用于垃圾邮件识别、个人电子邮件分类、文档分类、色情内容检测、语言检测和情感检测等。尽管是带着朴素的思想和看上去过于简单的假设,但朴素贝叶斯分类器在许多复杂的实际情形中仍能取得相当好的效果。

尽管一些方法(如,增强树、随机森林、最大熵、支持向量机等)在性能上超过了朴素贝叶斯分类器,但由于朴素贝叶斯计算量较小(在CPU和内存中),且只需要少量的训练数据,因此朴素贝叶斯分类器非常高效。此外,与其他方法相比,朴素贝叶斯的训练时间明显缩短。

Huang, J. (2003)所说,朴素贝叶斯分类器在CPU和内存中占用资源低,在一些情况下,它的表现效果与那些更复杂且更慢的技术非常接近。

何时使用朴素贝叶斯文本分类器?

在CPU和内存资源有限的情况下,可以使用朴素贝叶斯分类器。而且,当训练时间是一个关键因素时,能进行快速训练的朴素贝叶斯分类器将派上大用场。实际上其他分类器常常比朴素贝叶斯表现得更好,但情况并不总是这样!在把朴素贝叶斯从你的研究中排除之前,确保已经对其进行测试。注意,朴素贝叶斯分类器是许多研究中的基线。

使用哪一种朴素贝叶斯变种模型?

朴素贝叶斯有许多变种算法,在这里,我们将讨论其中的三个:多项式朴素贝叶斯,二值化的多项式朴素贝叶斯和伯努利朴素贝叶斯。请注意,由于它们使用完全不同的模型,因此每个变种会呈现完全不同的结果。

多项式朴素贝叶斯常用于词频占主导地位的分类问题,举个例子,如主题分类。当词频在分类中没有起到关键作用时,我们采用二值化的多项式朴素贝叶斯。例如,在进行情感分析时,重要的是一个人对某事物的评价为“差”,而不是评论“差”这个词的次数。另外,伯努利朴素贝叶斯用于判断特定的词语是否出现的情况,在垃圾邮件和成人内容检测方面表现效果非常好。

朴素贝叶斯的理论背景

如前所述,朴素贝叶斯分类器假定分类中使用的特征是独立的。尽管这个假设通常是错误的,但贝叶斯分类问题的相关分析显示,如Zhang(2004)所述,朴素贝叶斯分类器不合理的显著高效性是存在理论因素的 。

Manning等人(2008)的研究可以证明,虽然朴素贝叶斯的概率估计效果较差,但它在决定分类时表现优异。因此,虽然朴素贝叶斯通常过高估计了所选类别的概率,但由于我们只用它做出决策,而不是准确地预测实际概率,正确的决策使得模型是准确的。

在文本分类问题中,我们使用文档的单词(或词语/词条)来进行准确分类。通过“最大后验概率估计(MAP)”参数估计方法,我们提出了下述分类器:

其中t_k表示文档的词条(词语/单词),C表示分类中使用的类的集合,P(c|d)表示文档d属于某类别c的条件概率,P(c)表示关于类别c的先验概率,P(t_k|c)表示已知文档属于类别c时,其包含词条t_k的概率。

为了确定文档属于哪一个类别,我们必须估计给定类别的文档中,每个单词出现的概率(似然)的乘积,再乘以给定类别的先验概率 。在对C的所有类别进行上述计算之后,选择概率最高的类别。

由于计算机只可以处理具有一定小数点精度的数字,计算上述概率的乘积会导致浮点数下溢。最终,我们会得到一个很小的数字,内存无法存储,因此它会被四舍五入到零,致使分析失效。为了避免这种情况,我们对其取对数,最大化对数的总和,而非最大化概率的乘积:

因此,我们选择的类别为对数和最大,而不是概率最高。由于对数函数是单调递增的,故我们根据MAP(最大后验概率估计)得出的决策保持不变。

待解决的最后一个问题是,如果一个特定的特征/单词没有出现在一个特定的类别中,那么它的条件概率等于0。如果我们使用第一个决策方法(概率的乘积),那么乘积变成0,而如果我们使用第二个方法(对数之和),那么log(0)是没有定义的。为了避免这种情况,我们将使用加一的方法,或用拉普拉斯平滑对每项计数加1:

其中B'等于词汇表V中包含的词数。

朴素贝叶斯变种

接下来,让我们来看看三种常见的朴素贝叶斯变种模型,它们在计算特征的条件概率和类别的得分标准时有所不同。

多项式朴素贝叶斯模型

Manning等人(2008)所述,这一模型将给定类别下的某单词/词语/词条的条件概率,表示为属于类别c的文档中词语t的相对频率:

因此,这种变化考虑了属于类别c的训练文档中,词语t的出现次数,包括多次出现的情况。

下面以伪代码的形式介绍算法的训练和测试过程:

二值化(布尔)多项式朴素贝叶斯模型

Dan Jurafsky所描述的这种模型与多项式朴素贝叶斯模型是一样的,但是只观测在文档中词语是否出现,不考虑词语的出现次数。因为在某些情况下,单词的出现比词频更重要,而对单词的出现进行加权,并不能提高模型的准确性。

算法的训练和测试过程都保持不变,唯一不同的是,将每个文档中的所有单词的计数修改为1。

伯努利朴素贝叶斯模型

Manning等人(2008)提到了伯努利模型,该模型为词汇表中的每个词语创建了一个布尔型的标志,值为1表示词语属于测试集文档,值为0则表示不属于。伯努利模型和多项式模型存在明显不同,伯努利模型不仅不考虑词频,而且将某个文档中没有出现的词语也包含进去。在多项式模型中,直接忽略某文档中没有出现的词语;而在伯努利模型中,计算条件概率时,把这些也作为因子。

算法的训练和测试过程如下:

在对长文档进行分类时,由于没有考虑到单词多次出现,伯努利模型存在许多错误。另外值得注意的是,该模型对噪声性的特征特别敏感。

本文的版权归 蘑蘑蘑的菇 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

数据增强:数据有限时如何使用深度学习 ? (续)

这篇文章是对深度学习数据增强技术的全面回顾,具体到图像领域。这是《在有限的数据下如何使用深度学习》的第2部分。

2653
来自专栏机器之心

观点 | 关于序列建模,是时候抛弃RNN和LSTM了

选自Medium 作者:Eugenio Culurciello 机器之心编译 参与:刘晓坤、思源 作者表示:我们已经陷入 RNN、LSTM 和它们变体的坑中很多...

3916
来自专栏PPV课数据科学社区

主编推荐 | 学会数据分析背后的挖掘思维,分析就完成了一半!

主编推荐:通过言简意赅的语言把数据挖掘的原理、建模过程、数据分析和数据挖掘关系说的比较清楚,适合入门者了解相关概念。 正文如下: 在数据分析中,模型是非常有用和...

3156
来自专栏AI研习社

Prisma 技术发展的前世今生

面向读者:没有或有一定机器学习经验并对 Prisma 之类的 app 背后的原理感兴趣的读者。比较有经验的读者可以直接参照科技树阅读文章末罗列的引用论文。 阅读...

3847
来自专栏SIGAI学习与实践平台

化秋毫为波澜:运动放大算法(深度学习版)

运动放大(Motion Magnification),将视频中对应位置的运动进行放大,简单理解的话,就是找到时间段内的运动矢量,进行放大,然后权值叠加回去。

3505
来自专栏AI科技大本营的专栏

撕起来了!谁说数据少就不能用深度学习?这锅俺不背!

作者 | Andrew L. Beam 编译 | AI100 撕逼大战,从某种角度,标志着一个产业的火热。 最近,大火的深度学习,也开始撕起来了。 前几日,有一...

4627
来自专栏AI派

业界 | 如何达到Kaggle竞赛top 2%?这里有一篇特征探索经验帖

在数值数据上构建任意监督学习模型的一个重要方面是理解特征。查看模型的部分依赖图可帮助理解任意特征对模型输出的影响。

983
来自专栏机器之心

前沿 | 超越像素平面:聚焦3D深度学习的现在和未来

想象一下,如果你正在建造一辆自动驾驶汽车,它需要了解周围的环境。为了安全行驶,你的汽车该如何感知行人、骑车的人以及周围其它的车辆呢?你可能会想到用一个摄像头来满...

1842
来自专栏PPV课数据科学社区

一个小例子完美解释Naive Bayes(朴素贝叶斯)分类器

摘要: Naive Bayes分类器的解释有很多,但是基于一个小例子来解释的不多,本文就是基于一个简单通俗易懂的小例子来解释Naive Bayes分类器。 最简...

3434
来自专栏ATYUN订阅号

数据科学家应该知道的10个深度学习的高级架构!

随着深度学习不断地产生新进展,要跟上时代的脚步变得异常困难。几乎每天都有创新,或是产生一种新的深度学习的应用。 这篇文章包含了最近深度学习的一些进展。为了保持文...

3925

扫码关注云+社区

领取腾讯云代金券