朴素贝叶斯分类算法
- 主要内容
- 贝叶斯定理
- 朴素贝叶斯分类算法详解
- 朴素贝叶斯分类算法实例讲解
- 拉普拉斯平滑
1、贝叶斯定理
贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)。其中,P(A|B)是在B发生的情况下A发生的可能性,计算如下:
贝叶斯定理:
2、朴素贝叶斯分类算法详解
(1)x=(x1,x2,...xD)表示含有D维属性的数据对象。训练集S含有K个类别,表示为y=(y1,y2,...yK)。
(2)已知待分类数据对象x,预测x所属类别,计算方式如下:
所得
yk即为
x所属类别。上式表示,已知待分类数据对象
x的情况下,分别计算
x属于
y1、y2、...、yK的概率,选取其中概率的最大值,此时所对应的
yk,即为
x所属类别。
(3)根据贝叶斯定理,
P(yk|x)计算方式如下:
计算过程中,
P(x)对于
P(yk|x),相当于常数。因此,若想得到
P(yk|x)最大值,只需计算
P(x|yk)P(yk)最大值。如果类别的先验概率未知,即
P(yk)未知,则通常假定这些类别是等概率的,即
P(y1)=P(y2)=...=P(yK)。
(4)假设数据对象
x的各属性之间相互独立,
P(x|yk)计算方式如下:
(5)
P(xd|yk)的计算方式如下:
如果属性
Ad是离散属性或分类属性。训练集中属于类别
yk的数据对象,在属性
Ad下的相异属性值共有n个;训练集中属于类别
yk,且在属性
Ad下的属性值为
xd的数据对象共有m个。因此,
P(xd|yk)计算方式如下:
如果属性
Ad是连续属性。通常假设连续属性均服从均值为
μ、标准差为
σ的高斯分布, 即
因此,
P(xd|yk)计算方式如下:
其中,
μyk、
σyk表示训练集中属于类别
yk的数据对象在属性
Ad下的均值和标准差。
例如,设
x=(35,40000¥),其中
A1、
A2分别是属性age、income。设类别属性为buys_computer,
x的类别属性值为yes,即buys_computer=yes。针对连续属性age,假设训练集
S中购买计算机的顾客年龄为
38±12,即
μage=38、
σage=12。将
xage=35、
μage=38、
σage=12待入至上述高斯函数中,所得结果即为
P(age=35|buys_computer=yes)的值。
3、朴素贝叶斯分类算法实例讲解
给定训练数据如表1,使用朴素贝叶斯分类预测未知数据对象的类标号。数据对象用属性age、income、student、credit_rating描述。类别属性buys_computer具有两个不同值,即yes、no。
表1 AllElectronics 顾客数据库标记类的训练数据
待分类数据对象
x=(age=youth,income=medium,student=yes,credit_rating=fair)。
计算
P(yk):
P(buys_computer=yes)=9/14=0.643
P(buys_computer=no)=5/14=0.357
计算
P(xd|yk):
P(age=youth|buys_computer=yes)=2/9=0.222
P(age=youth|buys_computer=no)=3/5=0.600
P(income=medium|buys_computer=yes)=4/9=0.444
P(income=medium|buys_computer=no)=2/5=0.400
P(student=yes|buys_computer=yes)=6/9=0.667
P(student=yes|buys_computer=no)=1/5=0.200
P(credit_rating=fair|buys_computer=yes)=6/9=0.667
P(credit_rating=fair|buys_computer=no)=2/5=0.400
计算
P(x|yk):
P(x|buys_computer=yes)==P(age=youth|buys_computer=yes)×P(income=medium|buys_computer=yes)×P(student=yes|buys_computer=yes)×P(credit_rating=fair|buys_computer=yes)0.222×0.444×0.667×0.667=0.044(1)
同理:
P(x|buys_computer=no)=0.600×0.400×0.200×0.400=0.019
计算
P(x|yk)P(yk):
P(x|buys_computer=yes)P(buys_computer=yes)=0.044×0.643=0.028
P(x|buys_computer=no)P(buys_computer=no)=0.019×0.357=0.007
由于
0.028>0.007,因此,待分类数据对象
x的类别为
buys_computer=yes。
4、拉普拉斯平滑
如果待分类数据对象x=(age=youth,income=medium,student=yes,credit_rating=worse),而原始训练集的属性credit_rating中没有worse属性值,此时P(credit_rating=worse|buys_computer=yes)=0,导致P(x|buys_computer=yes)=0。然而真实情况中,待分类数据对象x可能有较高的概率属于buys_computer=yes类别。
如何解决上述问题呢?这里介绍一种简单的方法——拉普拉斯平滑处理,思想大致如下:待分类样本x的第d个属性特征xd在类别yk中出现的概率表示为P(xd|yk)=mn,其中针对训练样本集合,n表示类别yk中数据对象的总个数,m表示第d个属性特征xd在类别yk中出现的次数。假设,拉普拉斯平滑处理参数为λ。经过拉普拉斯平滑处理之后,P(xd|yk)=m+λn+Rλ,其中R表示类别yk中样本第d个属性特征不同取值的个数。相应的,P(yk)=nN,经过拉普拉斯平滑处理之后,变为P(yk)=n+λN+Kλ,其中N表示训练样本总个数,K表示训练样本类别个数。我们不难发现,通过拉普拉斯平滑处理能够有效避免概率为零的情况。
例 假定在某个训练数据集上只有两种类别,类别buys_computer=no包含500个对象,类别buys_computer=yes包含1000个对象。其中,当buys_computer=yes时,有0个对象income=low,990个对象income=medium,10个对象income=high。不使用拉普拉斯平滑处理,这些事件的概率分别是P(income=low|buys_computer=yes)=0、P(income=medium|buys_computer=yes)=9901000、P(income=high|buys_computer=yes)=101000、P(buys_computer=yes)=10001500。当使用拉普拉斯平滑处理时,假设拉普拉斯平滑处理参数为λ=1,分别得到如下的概率:
P(income=low|buys_computer=yes)=11003,P(income=medium|buys_computer=yes)=9911003,P(income=high|buys_computer=yes)=111003,P(buys_computer=yes)=10011502
经过拉普拉斯平滑处理之后的概率估计与对应的之前的概率估计很接近,但有效避免了零概率值。