您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于朴素贝叶斯的文本分类算法2
基于朴素贝叶斯的文本分类算法摘要:常用的文本分类方法有支持向量机、K-近邻算法和朴素贝叶斯。其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用。本文详细介绍了朴素贝叶斯的基本原理,讨论了两种常见模型:多项式模型(MM)和伯努利模型(BM),实现了可运行的代码,并进行了一些数据测试。关键字:朴素贝叶斯;文本分类TextClassificationAlgorithmBasedonNaiveBayesAuthor:soulmachineEmail:soulmachine@gmail.comBlog::SVM、KNNandNaïveBayes.NaïveBayesiseasytoimplementandfast,soitiswidelyused.ThisarticleintroducedthetheoryofNaïveBayesanddiscussedtwopopularmodels:multinomialmodel(MM)andBernoullimodel(BM)indetails,implementedrunnablecodeandperformedsomedatatests.Keywords:naïvebayes;textclassification第1章贝叶斯原理1.1贝叶斯公式设A、B是两个事件,且P(A)0,称为在事件A发生的条件下事件B发生的条件概率。乘法公式P(XYZ)=P(Z|XY)P(Y|X)P(X)全概率公式P(X)=P(X|Y1)+P(X|Y2)+…+P(X|Yn)贝叶斯公式在此处,贝叶斯公式,我们要用到的是以上公式,请读者参考《概率论与数理统计(第五版)》的1.4节“条件概率”(这里将原书中的A换成了X,B换成了Y),获得更深的理解。1.2贝叶斯定理在分类中的应用在分类(classification)问题中,常常需要把一个事物分到某个类别。一个事物具有很多属性,把它的众多属性看做一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个事物。类别也是有很多种,用集合Y={y1,y2,…ym}表示。如果x属于y1类别,就可以给x打上y1标签,意思是说x属于y1类别。这就是所谓的分类(Classification)。x的集合记为X,称为属性集。一般X和Y的关系是不确定的,你只能在某种程度上说x有多大可能性属于类y1,比如说x有80%的可能性属于类y1,这时可以把X和Y看做是随机变量,P(Y|X)称为Y的后验概率(posteriorprobability),与之相对的,P(Y)称为Y的先验概率(priorprobability)[2]。在训练阶段,我们要根据从训练数据中收集的信息,对X和Y的每一种组合学习后验概率P(Y|X)。分类时,来了一个实例x,在刚才训练得到的一堆后验概率中找出所有的P(Y|x),其中最大的那个y,即为x所属分类。根据贝叶斯公式,后验概率为在比较不同Y值的后验概率时,分母P(X)总是常数,因此可以忽略。先验概率P(Y)可以通过计算训练集中属于每一个类的训练样本所占的比例容易地估计。我们来举个简单的例子,让读者对上述思路有个形象的认识[3]。考虑一个医疗诊断问题,有两种可能的假设:(1)病人有癌症。(2)病人无癌症。样本数据来自某化验测试,它也有两种可能的结果:阳性和阴性。假设我们已经有先验知识:在所有人口中只有0.008的人患病。此外,化验测试对有病的患者有98%的可能返回阳性结果,对无病患者有97%的可能返回阴性结果。上面的数据可以用以下概率式子表示:P(cancer)=0.008,P(无cancer)=0.992P(阳性|cancer)=0.98,P(阴性|cancer)=0.02P(阳性|无cancer)=0.03,P(阴性|无cancer)=0.97假设现在有一个新病人,化验测试返回阳性,是否将病人断定为有癌症呢?在这里,Y={cancer,无cancer},共两个类别,这个新病人是一个样本,他有一个属性阳性,可以令x=(阳性)。我们可以来计算各个类别的后验概率:P(cancer|阳性)=P(阳性|cancer)p(cancer)=0.98*0.008=0.0078P(无cancer|阳性)=P(阳性|无cancer)*p(无cancer)=0.03*0.992=0.0298因此,应该判断为无癌症。在这个例子中,类条件概率,P(cancer|阳性)和P(无cancer|阳性)直接告诉了我们。一般地,对类条件概率P(X|Y)的估计,有朴素贝叶斯分类器和贝叶斯信念网络两种方法,这里介绍朴素贝叶斯分类器。1.3朴素贝叶斯分类器1、条件独立性给定类标号y,朴素贝叶斯分类器在估计类条件概率时假设属性之间条件独立。条件独立假设可以形式化的表达如下:其中每个训练样本可用一个属性向量X=(x1,x2,x3,…,xn)表示,各个属性之间条件独立。比如,对于一篇文章,Goodgoodstudy,Daydayup.可以用一个文本特征向量来表示,x=(Good,good,study,Day,day,up)。一般各个词语之间肯定不是相互独立的,有一定的上下文联系。但在朴素贝叶斯文本分类时,我们假设个单词之间没有联系,可以用一个文本特征向量来表示这篇文章,这就是“朴素”的来历。2、朴素贝叶斯如何工作有了条件独立假设,就不必计算X和Y的每一种组合的类条件概率,只需对给定的Y,计算每个xi的条件概率。后一种方法更实用,因为它不需要很大的训练集就能获得较好的概率估计。3、估计分类属性的条件概率P(xi|Y=y)怎么计算呢?它一般根据类别y下包含属性xi的实例的比例来估计。以文本分类为例,xi表示一个单词,P(xi|Y=y)=包含该类别下包含单词的xi的文章总数/该类别下的文章总数。4、贝叶斯分类器举例假设给定了如下训练样本数据,我们学习的目标是根据给定的天气状况判断你对PlayTennis这个请求的回答是Yes还是No。DayOutlookTemperatureHumidityWindPlayTennisD1SunnyHotHighWeakNoD2SunnyHotHighStrongNoD3OvercastHotHighWeakYesD4RainMildHighWeakYesD5RainCoolNormalWeakYesD6RainCoolNormalStrongNoD7OvercastCoolNormalStrongYesD8SunnyMildHighWeakNoD9SunnyCoolNormalWeakYesD10RainMildNormalWeakYesD11SunnyMildNormalStrongYesD12OvercastMildHighStrongYesD13OvercastHotNormalWeakYesD14RainMildHighStrongNo可以看到这里样本数据集提供了14个训练样本,我们将使用此表的数据,并结合朴素贝叶斯分类器来分类下面的新实例:x=(Outlook=Sunny,Temprature=Cool,Humidity=High,Wind=Strong)在这个例子中,属性向量X=(Outlook,Temperature,Humidity,Wind),类集合Y={Yes,No}。我们需要利用训练数据计算后验概率P(Yes|x)和P(No|x),如果P(Yes|x)P(No|x),那么新实例分类为Yes,否则为No。为了计算后验概率,我们需要计算先验概率P(Yes)和P(No)和类条件概率P(xi|Y)。因为有9个样本属于Yes,5个样本属于No,所以P(Yes)=9/14,P(No)=5/14。类条件概率计算如下:P(Outlook=Sunny|Yes)=2/9P(Outlook=Sunny|No)=3/5P(Temprature=Cool|Yes)=3/9P(Temprature=Cool|No)=1/5P(Humidity=High|Yes)=3/9P(Humidity=High|No)=4/5P(Wind=Strong|Yes)=3/9P(Wind=Strong|No)=3/5后验概率计算如下:P(Yes|x)=P(Outlook=Sunny|Yes)×P(Temprature=Cool|Yes)×P(Humidity=High|Yes)×P(Wind=Strong|Yes)×P(Yes)=2/9×3/9×3/9×3/9×3/9×9/14=2/243=9/1701≈0.00529P(No|x)=P(Outlook=Sunny|No)×P(Temprature=Cool|No)×P(Humidity=High|No)×P(Wind=Strong|No)×P(No)=3/5×1/5×4/5×3/5×5/14=18/875≈0.02057通过计算得出P(No|x)P(Yes|x),所以该样本分类为No[3]。5、条件概率的m估计假设有来了一个新样本x1=(Outlook=Cloudy,Temprature=Cool,Humidity=High,Wind=Strong),要求对其分类。我们来开始计算,P(Outlook=Cloudy|Yes)=0/9=0P(Outlook=Cloudy|No)=0/5=0计算到这里,大家就会意识到,这里出现了一个新的属性值,在训练样本中所没有的。如果有一个属性的类条件概率为0,则整个类的后验概率就等于0,我们可以直接得到后验概率P(Yes|x1)=P(No|x1)=0,这时二者相等,无法分类。当训练样本不能覆盖那么多的属性值时,都会出现上述的窘境。简单的使用样本比例来估计类条件概率的方法太脆弱了,尤其是当训练样本少而属性数目又很大时。解决方法是使用m估计(m-estimate)方法来估计条件概率:n是类yj中的样本总数,nc是类yj中取值xi的样本数,m是称为等价样本大小的参数,而p是用户指定的参数。如果没有训练集(即n=0),则P(xi|yj)=p,因此p可以看作是在类yj的样本中观察属性值xi的先验概率。等价样本大小决定先验概率和观测概率nc/n之间的平衡[2]。第2章朴素贝叶斯文本分类算法现在开始进入本文的主旨部分:如何将贝叶斯分类器应用到文本分类上来。2.1文本分类问题在文本分类中,假设我们有一个文档d∈X,X是文档向量空间(documentspace),和一个固定的类集合C={c1,c2,…,cj},类别又称为标签。显然,文档向量空间是一个高维度空间。我们把一堆打了标签的文档集合d,c作为训练样本,d,c∈X×C。例如:d,c={BeijingjoinstheWorldTradeOrganization,China}对于这个只有一句话的文档,我们把它归类到China,即打上china标签。我们期望用某种训练算法,训练出一个函数γ,能够将文档映射到某一个类别:γ:X→C这种类型的学习方法叫做有监督学习,因为事先有一个监督者(我们事先给出了一堆打好标签的文档)像个老师一样监督着整个学习过程。朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomialmodel)和伯努利模型(Bernoullimodel)。2.2多项式模型1、基本原理在多项式模型中,设某文档d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复,则先验概率P(c)=类c下单词总数/整个训练样本的单词总数类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。在这里,m=|V|,p=1/|V|。P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比
本文标题:基于朴素贝叶斯的文本分类算法2
链接地址:https://www.777doc.com/doc-2536673 .html