来源:数据分析师 CPDA | 时间:2015-07-24 | 作者:
5 朴素贝叶斯分类器举例
考虑下表中的数据集,我们可以计算每个分类属性的类条件概率,同时利用前面介绍的方法计算连续属性的样本均值和方差。
tid | 有房 | 婚姻状况 | 年收入 | 拖欠贷款 |
1 | 是 | 单身 | 125k | 否 |
2 | 否 | 已婚 | 100k | 否 |
3 | 否 | 单身 | 70k | 否 |
4 | 是 | 已婚 | 120k | 否 |
5 | 否 | 离异 | 95k | 是 |
6 | 否 | 已婚 | 60k | 否 |
7 | 是 | 离异 | 220k | 否 |
8 | 否 | 单身 | 85k | 是 |
9 | 否 | 已婚 | 75k | 否 |
10 | 否 | 单身 | 90k | 是 |
为了预测测试记录X=(有房=否,婚姻状况=已婚,年收入=$120k)的类标号,需要计算后研概率P(no|X)和P(yes|X),即通过计算先验概率P(Y)和类条件的乘积来估计。每个类的先验概率可以通过计算属于该类的训练记录所占的比例来估计。
P(X |no)=P(有房=否|no)* P(婚姻状况=已婚|no) * P(年收入=$120k|no)=4/7*4/7*0.0072=0.0024
P(Y |no)=P(有房=否|yes)* P(婚姻状况=已婚|yes) * P(年收入=$120k |yes)=1*0*1.2*10-9=0
放到一起可得到类no的后研概率P(no |X)=α*7/10*0.0024=0.0016α,其中α=1/P(X)是个常量。同理,可以得到类yes的后研概率等于0,即P(no |X)> P(yes |X),所以记录分类为no。
6 条件概率的m估计
前面的例子体现了从训练数据估计后研概率时的一个潜在问题:如果有一个属性的类条件概了等于0,则整个类的后研概率就等于0。仅使用记录比例来估计类条件概率的方法显得太脆弱了,尤其是当训练样例很少而属性数目又很大时。
一种更极端的情况是,当训练样例不能覆盖那么多的属性值时,我们可能就无法分类某些测试记录。例如,如果P(婚姻状况=离婚|no)为0而不是1/7,那么具有属性集X=(有房=是,婚姻状况=离婚,年收入=$120k)的记录的类条件概率如下:
P(no|X)=3/7*0*0.0072=0
P(yes|X)=0*1/3*1.2*10-9=0
朴素贝叶斯分类器无法分类该记录。解决该问题的途径是使用m估计方法来估计条件概率:
其中,n是类yj中的实例总数,nc是类yj的训练样例中取值xi的样例数,m是称为等价样本太小的参数,而p是用户指定的参数。如果没有训练集(即n=0),则P(xi|yj)=p。因此p可以看作是在类yj的记录中观察属性值xi的先验概率。等级样本大小决定先验概率p和观测概率nc/n之间的平衡。
在前面的例子中,条件概率P(婚姻状况=已婚|yes)=0,因为类中没有训练样例含有该属性值。在使用m估计方法中,m=3,p=1/3,则条件概率不再是0
P(婚姻状况=已婚|yes)=(0+3*1/3)/(3+3)=1/6
如果假设对类yes的所有属性p=1/3,则类no的所有属性p=2/3,则:
P(X |no)=P(有房=否|no)* P(婚姻状况=已婚|no) * P(年收入=$120k|no)=6/10*6/10*0.0072=0.0026
P(Y |no)=P(有房=否|yes)* P(婚姻状况=已婚|yes) * P(年收入=$120k |yes)=4/6*1/6*1.2*10-9=1.3*10-10
类no的后研概率P(no|X)=α*7/10*0.0026=0.0018α,而类yes的后研概率p(yes|X)= α*3/10*1.3*10-10=4*10-11α。尽管分类结果不变,但是当训练样例较少时,m估计通常是一种更加健壮的概率估计方法。
7 朴素贝叶斯分类器的特征
P(A=0|Y=0)=0.1, P(A=1|Y=0)=0.6, P(A=0|Y=1)=0.6, P(A=1|Y=1)=0.4
其中,A是二元属性,Y是二元类变量。假设存在另一个二值属性B,当Y=0时,B与A完全相关;当Y=1时,B与A相互独立。简单的说,假设B的类条件概率与A相同。给定一个记录,含有属性A=0,B=0,其后研概率计算如下:
如果P(Y=0)=P(Y=1),则朴素贝叶斯分类器将把记录指派到 类1.然而,事实上
P(A=0,B=0|Y=0)=P(A=0|Y=0)=0.4
因为当Y=0时,A和B完全相关。结果,Y=0的后研概率是:
比y=1的后研概率大,因此,该记录实际应该分类为类0。
下一节,我们将详细描述贝叶斯误差率,并对贝叶斯信念网络进行初步介绍。
本文由 项目数据分析师(CPDA)整理完成,严禁转载