本文所讲述的朴素贝叶斯文本分类算法也是基于《Web数据挖掘》(Bing Liu著)一书的。
文本分类是指如何实现从标注好类别的训练文本中学习得到分类模型的问题。用获得的模型来对新的文档进行分类。例如,有一些新闻报道,分属了三个类别,Sport、Politics和Science。我们想要学习一个分类器,能够将以后的新闻报道分门别类到这三个类别中。
朴素贝叶斯的学习方法利用了文本的特性,来解决文本分类问题。主要的思想和朴素贝叶斯分类的内容类似。
用于文本分类的朴素贝叶斯学习方法是在一个概率生成模型(generative model)上进行推导的。模型假设每一个文档由一个参数化概率分布(parametric distribution)生成的,这个分布是由一些隐藏参数(hidden parameter)决定的。训练数据就用来估计这些参数。然后用这些参数根据贝叶斯准则来计算后验概率(posterior probability)从而进行分类,这那么分类就成了简单地选择最有可能的类别。
生成模型主要基于两个假设:
(1)数据(文档)由一个混合模型生成。
(2)混合模型的每一个成分和类别一一对应。
令K为混合模型中的分布(也即成分)总数,令Θ为所有成分参数的集合,Θ={φ1, φ2, …, φK,θ1, θ2, …, θk },其中φj是第j个成分的混合权重(或者称为混合概率),θj是第j个成分的参数。混合权重满足Σφj=1的约束。
让我们来看看混合模型如何生成一组文档。
回忆之前提到的分类问题,类别C为具有|C|个不同值的类别属性,即c1, c2, …,c|C|,因为我们假设混合模型的每一个成分和类别一一对应,所以|C|=K,并且第j个成分可以表示为对应的类别cj,其参数为θj。混合权重是类别先验概率(class prior probabilities),即 φj=Pr(cj l Θ)。
混合模型通过以下步骤生成文档d:
(1)根据类别先验概率(即混合权重)φj 选择一个混合成分(类别)。
(2)根据对应的混合成分生成文档d,由分布Pr(d | cj , Θ)决定,更准确地说由Pr(d | cj , θj)决定。
文档d由混合模型生成的概率可以全概率展开在所有的混合成分上: Pr(d l Θ) = Σ Pr(cj l Θ) x Pr(d | cj , Θ)
因为每篇文档与它的类别相关,我们可以为文本分类推导朴素贝叶斯模型。注意在之前的概率表达中,为了使用生成模型,我们用Θ表示对参数集合的依赖。在真实的实现过程中,我们不用关心Θ,它可以被忽略。
一个文本文档包括了一系列的句子,每个句子又都含有一连串的单词。但是,因为对字词顺序和关系的建模十分复杂,为了推导贝叶斯分类,我们要做一些前提假设。这也就是称最终的分类模型为朴素贝叶斯分类的原因。
特别地,朴素贝叶斯分类将每篇文档看作一“袋子”的词(a bag of words)。除了上述混合模型所作的假设,生成模型还做了以下基于词和文章长度的假设:
(1)文档中的词都是独立于语境生成的,也就是说给定类别后,每个词的生成和别的词是相互独立的。这和之前的朴素贝叶斯假设很相似。
(2)单词被生成的概率与它在文档中的位置无关。例如,在文档开头看到单词“student”和在别处看到的概率是一样的。
(3)文档的长度与类别无关。
根据这些假设,每个文档可以被看作由一个多项式分布(multinomial distribution)生成。换句话说,每个文档遵循单词的多项式分布,作了与文档长度相同次数的独立试验。单词都从一个给定的词典V={w1, w2, …, w|V|}中提取,|V|是词典中的单词总数 (K=|V|)。
多项式分布:
一次多项式分布试验是一个可以产生 k≥2 个不同结果的过程。每个结果都有对应的出现概率,分别记为p1, p2, …, pk。例如,投骰子是一个多项式分布试验,分别有1,2,3,4,5,6六种可能的结果。对于一个公平的骰子,p1=p2=…=p6=1/6。
假设进行了n次独立试验,每次都有k个可能的结果和对应的k个概率p1, p2, …, pk。将k个可能的结果记为1,2,3,…,k。对于每种结果,令Xt为n次试验中结果为t的次数。那么X1, X2, …, Xk就是离散随机变量,符合参数为p1, p2, …, pk的多项式分布。在本文中,n对应于文档的长度,试验的结果对应于词典V中的单词。
p1, p2, …, pk对应于单词在文档中出现的概率,即Pr(wt | cj, Θ)。Xt是代表单词wt在文档中出现次数的随机变量。
这样我们就可以从多项式分布的概率函数,得到给定类别cj后一篇文档d生成的概率(包括文档长度的概率Pr(d),它与类别独立):
每个生成模型的成分参数θj对应于类别cj,单词的概率为Pr(wt | cj, Θ),并且根据我们的假设,文档长度的概率对于每个类别(混合成分)都是一样的。
参数可以从训练样本D={D1, D2, …, D|C|}中估计,其中Dj是属于类别cj的子数据集合,|C|是类别的数目。词典V是D中所有不同单词的集合。注意到我们不需要估计文档长度的概率,因为它并不在最后的分类器中被用到。
Θ的估计记为Θ^。参数的估计是基于经验的计数(empirical counts)得到的。
给定类别cj后,wt的概率Pr(wt | cj, Θ) 可以简单地用wt在Dj(即关于类cj)中出现的次数 除以 在训练数据中所有单词的出现总次数 的商来估计。
确定估计的参数后,分类的时候我们需要计算测试文档d属于每个类别cj的概率。
就是说,计算每个混合成分cj生成文档d的概率。
其中,对于每个类别来说,分母是相同的,所以不用计算。
wd,k表示文档d中k这个位置上的单词。分子 = 类别cj的先验概率 x d中每个单词的概率(出现几次乘几次)
然后选择概率最大的类别。
朴素贝叶斯学习所做的大多数假设都与实际情况不符。例如,文档中的单词明显不与其他单词独立。混合模型的类别与成分一一对应的假设也不正确,因为一个类别可能含有多主题的文章。尽管存在出入,但研究表明朴素贝叶斯学习仍然能产生准确地模型。
朴素贝叶斯学习效率很高。它只需要对训练数据进行一次扫描就可以估计出所有需要的概率。也可以作为增量算法使用。当新数据出现的时候,我们可以更新模型,概率值可以方便地得到更新。所以朴素贝叶斯在文本分类中被广泛地使用。
还在写...