您的位置:首页 > 其它

朴素贝叶斯分类器

2016-06-04 11:50 309 查看

参考博客:

http://www.open-open.com/doc/view/2952280b0327489684c0be7e96d2eadd
http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html

   先给一些基础知识:


表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:



      贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

      下面不加证明地直接给出贝叶斯定理:

      



1、朴素贝叶斯分类器的原理

朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。
举个例子:

某个医院早上收了六个门诊病人,如下表。

  症状  职业   疾病

  打喷嚏 护士   感冒 

  打喷嚏 农夫   过敏 

  头痛  建筑工人 脑震荡 

  头痛  建筑工人 感冒 

  打喷嚏 教师   感冒 

  头痛  教师   脑震荡

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理

 P(A|B) = P(B|A) P(A) / P(B)

可得

   P(感冒|打喷嚏x建筑工人) 

    = P(打喷嚏x建筑工人|感冒) x P(感冒) 

    / P(打喷嚏x建筑工人)


假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了

   P(感冒|打喷嚏x建筑工人) 

    = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒) 

    / P(打喷嚏) x P(建筑工人)


这是可以计算的。

  P(感冒|打喷嚏x建筑工人) 

    = 0.66 x 0.33 x 0.5 / 0.5 x 0.33 

    = 0.66

因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。

这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。


2、朴素贝叶斯分类器的流程

  朴素贝叶斯分类的正式定义如下:

      1、设

为一个待分类项,而每个a为x的一个特征属性。x是样本,a是样本中的各个属性


      2、有类别集合

。C是标签


      3、计算

。计算在各个样本属性下,是某个类别的概率


      4、如果

,则

。取概率最大的作为最终的分类结果


      那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:

      1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

      2、统计得到在各类别下各个特征属性的条件概率估计。即



      3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

      



      因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

      

,m代表的是属性的个数,例如19个特征


      根据上述分析,朴素贝叶斯分类的流程可以由下图表示(暂时不考虑验证):





      可以看到,整个朴素贝叶斯分类分为三个阶段:

      第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

      第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

      第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成


3、估计类别下特征属性划分的条件概率及Laplace校准

      这一节讨论P(a|y)的估计。

      由上文看出,计算各个划分的条件概率P(a|y)是朴素贝叶斯分类的关键性步骤,当特征属性为离散值时,只要很方便的统计训练样本中各个划分在每个类别中出现的频率即可用来估计P(a|y),下面重点讨论特征属性是连续值的情况。

      当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:

      



      而



      因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,注意这里是每个类别中此项的均值和标准差,代入上述公式即可得到需要的估计值。均值与标准差的计算在此不再赘述。

      另一个需要讨论的问题就是当P(a|y)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对没类别下所有划分的计数加1,比如前面的门诊例子中,p(教师|感冒)=0,那我们就在这一项下计数加1(当然这是针对离散的情况下,因为连续的情况下,不会出现0这种概率值),这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。


4、应用实例

下面是一组人类身体特征的统计资料。要求:根据身高,体重,脚掌等特征来判断是男是女

  性别  身高(英尺) 体重(磅)  脚掌(英寸)

  男    6       180     12 

  男    5.92     190     11 

  男    5.58     170     12 

  男    5.92     165     10 

  女    5       100     6 

  女    5.5      150     8 

  女    5.42     130     7 

  女    5.75     150     9

已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?

根据朴素贝叶斯分类器,计算下面这个式子的值。

P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)

这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?

这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。

比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。



有了这些数据以后,就可以计算性别的分类了。

  P(身高=6|男) x P(体重=130|男) x P(脚掌=8|男) x P(男) 

    = 6.1984 x e-9

  P(身高=6|女) x P(体重=130|女) x P(脚掌=8|女) x P(女) 

    = 5.3778 x e-4

可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。


5、朴素贝叶斯分类器的优缺点

朴素的贝叶斯分类器最大的优势是他在接受大量数据训练和查询时的高速度。尤其当训练量递增时更是如此(我们可以分多次的对其进行学习的训练,而一些其他的方法如决策树和支持向量机要一次传送整个训练数据集)
另一个优点是,其对分类器的学习情况有着比较简单的解释,我们可以简单的通过查询学习时计算的一些概率值来了解其分类原理。

朴素的贝叶斯分类最大的缺陷是它无法处理特征符合所产生的变化(即前面提到过的实际上难以满足的相互独立)



优点:

一、           朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。

二、           NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。


缺点:

一、           理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的(可以考虑用聚类算法先将相关性较大的属性聚类),这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。

二、           需要知道先验概率。

三、           分类决策存在错误率

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: