Preface
本文缘起于最近在读的一本书 -- Tom M.Mitchell 的《机器学习》 书中第 6 章详细讲解了贝叶斯学习的理论知识,为了将其应用到实际中来,参考了网上许多资料,从而得此文。文章将分为两个部分,第一部分将介绍贝叶斯学习的相关理论 ( 如果你对理论不感兴趣,请直接跳至第二部分<<基于朴素贝叶斯分类器的文本分类算法(下) >> ) 。第二部分讲如何将贝叶斯分类器应用到中文文本分类,随文附上示例代码。
Introduction
我们在《概率论和数理统计》这门课的第一章都学过贝叶斯公式和全概率公式,先来简单复习下:
条件概率
定义 设 A, B 是两个事件,且 P(A)>0 称 P(B ∣ A)=P(AB)/P(A) 为在条件 A 下发生的条件事件 B 发生的条件概率。
乘法公式 设 P(A)>0 则有 P(AB)=P(B ∣ A)P(A)
全概率公式和贝叶斯公式
定义 设 S 为试验 E 的样本空间, B1, B2, …Bn 为 E 的一组事件,若 BiBj=Ф, i≠j, i, j=1, 2, …,n; B1 ∪ B2 ∪ … ∪ Bn=S 则称 B1, B2, …, Bn 为样本空间的一个划分。
定理 设试验 E 的样本空间为, A 为 E 的事件, B1, B2, …,Bn 为的一个划分,且 P(Bi)>0 (i=1, 2, …n) ,则 P(A)=P(A ∣ B1)P(B1)+P(A ∣ B2)+ …+P(A ∣ Bn)P(Bn) 称为全概率公式。
定理 设试验俄 E 的样本空间为 S , A 为 E 的事件, B1, B2, …,Bn 为的一个划分,则
P(Bi ∣ A)=P(A ∣ Bi)P(Bi)/∑P(B | Aj)P(Aj)=P(B | Ai)P(Ai)/P(B)
称为贝叶斯公式。说明: i , j 均为下标,求和均是 1 到 n
下面我再举个简单的例子来说明下。
示例 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.03 , P( 阴性 | 无 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 时可能性最大的假设 h ( h 属于 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 的目标值 (yes 或 no).
由上面的公式可以得到:
可以得到:
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—— 训练 文本集 合中经过踢 出无用词去除文本预处理之后关键字的数 量。