7.4贝叶斯分类算法
贝叶斯分类算法
[P1] k近邻分类,这也是整个数据挖掘中最简单的算法之一。 k近邻分类在对未知数据对象进行分类前,不需要针对原来的数据对象进行学习,也不需要建立任何模型,所以我们把这种类型的分类器称为 惰性学习器。我们这里介绍的贝叶斯分类算法与 k近邻的思路不同,需要先学习训练数据,建立好模型。这样,开始时花费的时间多,但是后面对数据进行分类就变得简单了。
[P2] 这章我们分为两节,首先是介绍什么是贝叶斯分类,然后再介绍其中具体的朴素贝叶斯分类。
[P3] 贝叶斯分类算法是基于贝叶斯定理,利用贝叶斯公式计算出待分类对象的后验概率,即该对象属于某一类别的概率,然后选择具有最大后验概率的类别作为该对象所属的类别。
[P4] 贝叶斯定理的公式如课件所示。我们做一个假设,你到某食堂吃了一份午饭,在这份套餐中同时吃到了一只苍蝇和一根蛆。把食堂吃午饭这个事情看成给定的外部环境,我们考虑两个事件:H —吃到了一只苍蝇,X —吃到了一根蛆,假设吃到苍蝇的概率是 0.0001 (万分之一),这可以用“ 有苍蝇的午餐除以所有午餐”来估计,吃到蛆的概率是 0.00001(十万分之一),这可以用“ 有蛆的午餐除以所有午餐”来估计。如果这两个事件是独立的,则同时吃到一只苍蝇和一根蛆的概率就等于吃到苍蝇的概率乘以吃到蛆的概率。也就是两个数字相乘,得到结果为概率 十亿分之一。那公式中 P(H|X)代表在 X 已经发生的情况下,H 也跟着发生的概率,也就是吃到蛆 的情况下,再吃出来一只苍蝇的概率。这种,在某个前提下再发生另外一个事情的概率,称为后验概率。单纯的 P(H) 或者 P(X) 是指没有任何前提的情况下,发生的概率,称为前验概率。也就是,把条件概率称为后验概率,把直接的概率称为先验概率。
[P5] 贝叶斯信念网络 简称贝叶斯网,用图形表示一组随机变量之间的概率关系。贝叶斯网有两个主要成分:一个有向无环图(DAG):图中每个结点代表一个随机变量,每条有向边表示变量之间的依赖关系。若有一条有向边从结点X到结点Y,那么X就是Y的父结点,Y就是X的子结点。另外一个条件概率表(CPT):把各结点和父结点关联起来。在CPT中,如果结点X没有父结点,则表中只包含先验概率P(X);如果结点X只有一个父结点Y,则表中包含条件概率P(X|Y);如果结点X有多个父结点 Y1 到 Yk,则表中包含条件概率在 Y1到Yk 发生的情况下,X 的概率。
[P6] 我们定义联合概率:对于随机变量 Z1、到 Zn ,任何数据对象的联合概率可以通过以下公式计算获得。其中,parent(Zi) 表示 Zi 的父结点,P(zi|parent(Zi)) 对应条件概率表中关于 Zi 结点的一个入口。若Zi没有父结点,则 它 等于 P(zi)
[P7] 这里是一个具体例子。有X、Y和Z三个二元随机变量(取值只有0、1两种情况),假设X、Y之间是独立的,它们对应的条件概率表如表所示。若已知条件概率P(X=1)=0.3,P(Y=1)=0.6,P(Z)=0.7,求P(X=0,Y=0|Z=0)的后验概率。表中的数值表示的是后验概率P(Z|X,Y),如有:P(Z=1|X=1,Y=1)=0.8,P(Z=0|X=1,Y=1)=0.2。
[P8] 画出相应的贝叶斯网如图所示。一般地,在画贝叶斯网时,若已知 P(X|Y) 条件概率,则画一条从 Y 到 X 的有向边;若已知 Y1 到 Yk 发生的前提下 X 的条件概率,则从 Y1、Y2、…、Yk各画一条从 Yi 到 X 的有向边。如图所示,由于X、Y均没有父结点,所以联合概率就是两个独立概率的乘积。依条件概率表有 X等于0 和 Y等于0 的前提下,Z等于0 的概率为 0.9 。 根据贝叶斯定理,Z等于0的前提下,X等于0 并且 Y等于0 的概率按照公式计算得出为 0.84 。
[P9] 知道了贝叶斯原理之后,我们来介绍朴素贝叶斯分类。朴素贝叶斯分类基于一个简单的假定:在给定分类特征条件下,描述属性值之间是相互条件独立的。
[P10] 朴素贝叶斯分类思想是:假设每个样本用一个 n 维特征向量 X 来表示,描述属性为 A1 到 An 注意,Ai之间相互独立。类别属性为 C,假设样本中共有m个类即 C1 到 Cm,对应的贝叶斯网如图所示。
[P11] 给定一个未知类别的样本X,朴素贝叶斯分类将预测X属于具有最高后验概率P(Ci|X)的类,也就是说,将X分配给类Ci,当且仅当它的后验概率最大。
[P12] 举个案例。考虑一个婚恋网站,一名女性刚刚注册,希望通过这个网站找到男朋友。现在系统展示了 12 个男生的基本资料,她已经根据这些资料做出了有没有进一步接触兴趣的判断。为了简单起见,我们只考虑 4 个维度:年龄、年收入、身高和长相,并且这 4 个维度已经被离散化。年龄取值有 7 个,分别是:50 岁以上、45~50 岁、40~45 岁、35~40 岁、30~35 岁、25~30 岁和 25 岁以下。年收入也有 7 个取值, 分别是 100 万元以上、 60~100 万元、40~60 万元、30~40 万元、20~30 万元、10~20 万元和 10 万元以下。身高有 6 个取值, 分别是 1.80 米以上、1.75~1.80 米、1.70~1.75 米、1.65~1.70 米、1.60~1.65 米、1.60 米以下。长相有 3 个取值,分别是:帅、中、丑。表中就是该女性根据基本资料做出的判断。最后一列有无兴趣是最终判断的结果。现在我们考虑一个问题,有一个 35~40 岁的帅哥,年收入 30~40 万元,身高1.70~1.75 米,她会有兴趣进一步接触吗?
[P13] 我们用 4 维向量 x=(35-40,30-40,1.70-1.75, handsome) 表示这个待判定的男性的 4 个属性,用 Yes 表示感兴趣的类别,用 No 表示不感兴趣的类别,那么现在这个问题就转化为 比较 在X发生的前提下 Yes 的概率 和 在 X 发生的前提下 No 的概率 的大小。根据贝叶斯定理,我们可以得到这个公式。其中,Pr( x ) 对于比较相对大小不起作用,而恰好 Pr(Yes)=Pr(No)=6/ 12=0.5 ,因此我们只需要比较 Pr( x | Yes) 和 Pr( x | No) 。根据独立性假设,可以得到第二个公式。
[P14] 我们接下来一项一项看。在所有感兴趣的类别中,即 25 岁以下 0 名,25~30 岁 0 名,30~35 岁 1 名,35~40 岁 3 名,40~45 岁 1 名,45~50 岁 0 名,50 岁以上 1 名。通过拉普拉斯平滑,其计数分别变成 1、1、2、4、2、1、2,其中对应 35~40 岁的数值为 4,所以在有兴趣的人中,35到40岁的概率为 4 除以 13。类似地,在所有感兴趣的类别中,年收入 100 万元以上的 1 名,60~100 万元的2 名,40~60 万元的 2 名,30~40 万的 0 名,20~30 万元的 1 名,10~20万元的 0 名,10 万元以下的 0 名。通过拉普拉斯平滑,其计数分别变成 2、3、3、1、2、1、1,其中对应 30~40万年收入的计数为 1,所以在有兴趣的人中,年收入30万到40万的概率为 1 除以 13。在所有感兴趣的类别中,身高 1.60 米以下的 0 名,身高 1.60~1.65 米的 1名,身高 1.65~1.70 米的 1 名,身高 1.70~1.75 米的 3 名,身高 1.75~1.80 米的 1名,身高 1.80 米以上的 0 名。通过拉普拉斯平滑,其计数分别变为 1、2、2、4、2、1,其中对应身高 1.70~1.75 米的计数为 4,所以在有兴趣的人中,身高 1米7 到 1米75 的概率为 4 除以 12 。最后,她所有感兴趣的 6 个男生中有 4 帅、 1中、 1 丑,通过拉普拉斯平滑,所对应的计数变为 5、2、2,其中“帅”对应的计数为 5,所以在有兴趣的人中,帅的概率是 5 除以 9 。
[P15] 综上,我们可以得到,所以在有兴趣的人中,满足上述条件的概率为 0.004383 。用同样的方法,我们还可以计算,在不感兴趣的人中,满足上述条件的概率为 0.0008261。根据前面的数据,我们得出先验概率为 6除以12 为 0.5 。最终我们可以推断出,在给定的条件下,感兴趣 的概率大于 不感兴趣 的概率。因此朴素贝叶斯模型会预测她对这个男性感兴趣。
[P16] 下面这是具体的算法代码。
[P17] 代码大家可以课后再仔细查看。
[P18] 这章我们主要介绍了贝叶斯分类算法。贝叶斯分类算法是基于贝叶斯定理,利用贝叶斯公式计算出待分类对象的后验概率,我们通过后验概率找出概率最大的分类,然后把这个分类赋值给我们的数据对象,从而完成数据的分类操作。