朴素贝叶斯分类算法

朴素贝叶斯分类算法

  • 主要内容
    • 贝叶斯定理
    • 朴素贝叶斯分类算法详解
    • 朴素贝叶斯分类算法实例讲解
    • 拉普拉斯平滑

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属于y1y2...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),其中A1A2分别是属性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)
(1)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

同理:
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)=0P(income=medium|buys_computer=yes)=9901000P(income=high|buys_computer=yes)=101000P(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

经过拉普拉斯平滑处理之后的概率估计与对应的之前的概率估计很接近,但有效避免了零概率值。