基于朴素贝叶斯分类器的文本分类算法(上)

 

转载请保留做者信息:算法

做者:phinecos(洞庭散人)机器学习

Bloghttp://phinecos.cnblogs.com/ide

Emailphinecos@163.com学习

 Preface测试

       本文缘起于最近在读的一本书-- Tom M.Mitchell《机器学习》,书中第6章详细讲解了贝叶斯学习的理论知识,为了将其应用到实际中来,参考了网上许多资料,从而得此文。文章将分为两个部分,第一部分将介绍贝叶斯学习的相关理论(若是你对理论不感兴趣,请直接跳至第二部分<<基于朴素贝叶斯分类器的文本分类算法(下)>>)。第二部分讲如何将贝叶斯分类器应用到中文文本分类,随文附上示例代码。spa

 Introductionorm

咱们在《几率论和数理统计》这门课的第一章都学过贝叶斯公式和全几率公式,先来简单复习下:xml

条件几率 blog

定义 A, B是两个事件,且P(A)>0 P(BA)=P(AB)/P(A)为在条件A下发生的条件事件B发生的条件几率。事件

乘法公式 P(A)>0 则有P(AB)=P(BA)P(A)

全几率公式和贝叶斯公式

定义 S为试验E的样本空间,B1, B2, …BnE的一组事件,若BiBj=Ф, i≠j, i, j=1, 2, …,n; B1B2Bn=S则称B1, B2, …, Bn为样本空间的一个划分。

定理 设试验E的样本空间为,AE的事件,B1, B2, …,Bn为的一个划分,且P(Bi)>0 (i=1, 2, …n),则P(A)=P(AB1)P(B1)+P(AB2)+ …+P(ABn)P(Bn)称为全几率公式。

定理 设试验俄E的样本空间为SAE的事件,B1, B2, …,Bn为的一个划分,则

P(BiA)=P(ABi)P(Bi)/∑P(BAj)P(Aj)=P(BAi)P(Ai)/P(B)

称为贝叶斯公式。说明:ij均为下标,求和均是1n  

 下面我再举个简单的例子来讲明下。

示例1

考虑一个医疗诊断问题,有两种可能的假设:(1)病人有癌症。(2)病人无癌症。样本数据来自某化验测试,它也有两种可能的结果:阳性和阴性。假设咱们已经有先验知识:在全部人口中只有0.008的人患病。此外,化验测试对有病的患者有98%的可能返回阳性结果,对无病患者有97%的可能返回阴性结果。

上面的数据能够用如下几率式子表示:

P(cancer)=0.008,P(cancer)=0.992

P(阳性|cancer)=0.98,P(阴性|cancer)=0.02

P(阳性|cancer)=0.03P(阴性|cancer)=0.97

假设如今有一个新病人,化验测试返回阳性,是否将病人判定为有癌症呢?咱们能够来计算极大后验假设:

P(阳性|cancer)p(cancer)=0.98*0.008 = 0.0078

P(阳性|cancer)*p(cancer)=0.03*0.992 = 0.0298

所以,应该判断为无癌症。

 贝叶斯学习理论

       贝叶斯是一种基于几率的学习算法,可以用来计算显式的假设几率,它基于假设的先验几率,给定假设下观察到不一样数据的几率以及观察到的数据自己(后面咱们能够看到,其实就这么三点东西,呵呵)。

      咱们用P(h)表示没有训练样本数据前假设h拥有的初始几率,也就称为h的先验几率,它反映了咱们所拥有的关于h是一个正确假设的机会的背景知识。固然若是没有这个先验知识的话,在实际处理中,咱们能够简单地将每一种假设都赋给一个相同的几率。相似,P(D)表明将要观察的训练样本数据D的先验几率(也就是说,在没有肯定某一个假设成立时D的几率)。而后是P(D/h),它表示假设h成立时观察到数据D的几率。在机器学习中,咱们感兴趣的是P(h/D),也就是给定了一个训练样本数据D,判断假设h成立的几率,这也称之为后验几率,它反映了在看到训练样本数据D后假设h成立的置信度。(注:后验几率p(h/D)反映了训练数据D的影响,而先验几率p(h)是独立于D的)。

 

P(h|D) = P(D|h)P(h)/p(D),从贝叶斯公式能够看出,后验几率p(h/D)取决于P(D|h)P(h)这个乘积,呵呵,这就是贝叶斯分类算法的核心思想。咱们要作的就是要考虑候选假设集合H,并在其中寻找当给定训练数据D时可能性最大的假设hh属于H)。

      简单点说,就是给定了一个训练样本数据(样本数据已经人工分类好了),咱们应该如何从这个样本数据集去学习,从而当咱们碰到新的数据时,能够将新数据分类到某一个类别中去。那能够看到,上面的贝叶斯理论和这个任务是吻合的。

朴素贝叶斯分类

 

也许你以为这理论还不是很懂,那我再举个简单的例子,让你们对这个算法的原理有个快速的认识。(注:这个示例摘抄自《机器学习》这本书的第三章的表3-2.

假设给定了以下训练样本数据,咱们学习的目标是根据给定的天气情况判断你对PlayTennis这个请求的回答是Yes仍是No

Day

Outlook

Temperature

Humidity

Wind

PlayTennis

D1

Sunny

Hot

High

Weak

No

D2

Sunny

Hot

High

Strong

No

D3

Overcast

Hot

High

Weak

Yes

D4

Rain

Mild

High

Weak

Yes

D5

Rain

Cool

Normal

Weak

Yes

D6

Rain

Cool

Normal

Strong

No

D7

Overcast

Cool

Normal

Strong

Yes

D8

Sunny

Mild

High

Weak

No

D9

Sunny

Cool

Normal

Weak

Yes

D10

Rain

Mild

Normal

Weak

Yes

D11

Sunny

Mild

Normal

Strong

Yes

D12

Overcast

Mild

High

Strong

Yes

D13

Overcast

Hot

Normal

Weak

Yes

D14

Rain

Mild

High

Strong

No

 能够看到这里样本数据集提供了14个训练样本,咱们将使用此表的数据,并结合朴素贝叶斯分类器来分类下面的新实例:

(Outlook = sunny,Temprature = cool,Humidity = high,Wind = strong)

咱们的任务就是对此新实例预测目标概念PlayTennis的目标值(yesno).

由上面的公式能够获得:

能够获得:

      P(PlayTennis =yes) = 9/14 = 0.64,P(PlayTennis=no)=5/14 = 0.36

      P(Wind=Stong| PlayTennis =yes)=3/9=0.33,p(Wind=Stong| PlayTennis =no)=3/5 = 0.6

其余数据相似可得,代入后获得:

P(yes)P(Sunny|yes)P(Cool|yes)P(high|yes)P(Strong|yes) = 0.0053

P(no)P(Sunny|no)P(Cool|no)P(high|no)P(Strong|no)=0.0206

所以应该分类到no这一类中。

 

贝叶斯文本分类算法

      好了,如今开始进入本文的主旨部分:如何将贝叶斯分类器应用到中文文本的分类上来?

根据联合几率公式(全几率公式)

 

M——训练文本集合中通过踢出无用词去除文本预处理以后关键字的数量。

相关文章
相关标签/搜索