朴素贝叶斯分类

        在很多的应用中,属性集与类别之间的关系是不确定的,换句话说,尽管测试样本的属性值与训练样本相同,但是也不一定能正确的预测其类别,其中一个原因是噪声的存在,另一个原因是某些影响分类的属性并没有出现在属性集中。贝叶斯方法都有所耳闻,之所以称为“朴素”贝叶斯方法,是因为在分类时,假定了“各变量间相互独立”的条件,这个条件算是比较强的了,大大简化了分类时的计算,但同时也丢失了一些分类准确性,毕竟不是所有变量都相互独立。为了弱化“各变量间相互独立”条件的影响,人们又提出了基于贝叶斯方法的其它分类方法,如贝叶斯信念网络。总之,我们在数据挖掘时希望“各变量间相互独立”条件是成立的,但实际并非那样,因此在需要考虑变量间存在相关性的问题,或许在提取数据特征的时候,我们可以做到从源头去满足“各变量间相互独立”条件,这样最好了。扯远了,还是介绍一下朴素贝叶斯分类方法吧。

1.  贝叶斯定理的应用

       在其它一些分类方法中(如决策树、基于规则的分类、K最邻近分类等),类别预测结果是唯一的,而在朴素贝叶斯分类方法中,对于待分类样本X,可能出现算得其有70%的可能性属于类y_{1},有25%的可能性属于类y_{2},有5%的可能性属于类y_{3},这是朴素贝叶斯分类方法的特别之处,依据计算结果的大小,最终当然有理由认为X属于类y_{1}

      对朴素贝叶斯分类器的训练也即是生成一张概率表,为了生成这张概率表,我们先引入贝叶斯定理,对贝叶斯理论这里就不多说了,这里直接引入贝叶斯公式,然后说明该公式是如何在分类过程中作用的

                                                                         P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)}

       P(Y)表示类别的先验概率,可以理解为当我们对待分类样本X的取值一无所知时,将其分为不同类的概率。我们可以按照以下公式确定P(Y)

                                                                                     P(y_{i})=\frac{n_{i}}{N}

P(y_{i})表示类y_{i}的先验概率,n_{i}表示训练集中属于类y_{i}的样本个数,N表示训练集中包含的样本数

        P(X|Y)表示在已知类别下,样本X取某组属性值的概率。由于训练集中包含多个变量,因此在非“朴素”条件下计算P(X|Y)是非常困难的,因为不知道诸多变量之间是否存在相关性以及相关程度如何,而在“朴素”条件下,计算X任意一组取值的条件概率则变得简单,假设训练集中包含变量个数为d

                                              P(X=\left \{ X_{1}=x_{1}, X_{2}=x_{2}, ...,X_{d}=x_{d} \right \}|Y=y)=\prod_{i=1}^{d}P(X_{i}=x_{i}|Y=y)

       P(X)表示样本取某组值X=\left \{ X_{1}=x_{1}, X_{2}=x_{2}, ...,X_{d}=x_{d} \right \}的概率,由于总体分布未知,要想准确的计算该值是不可能的,但好在对于一个待分类样本,该值在计算时是一个固定值,可以不用计算,我们在确定样本X的类别时,并不是真的计算出其属于各类的概率,而是要比较其属于各类概率的大小,最终找出最大的概率值。

2.  条件概率的计算方式

       对于条件概率P(X|Y)的计算,一般有两种方式,对应着两种不同的情况,一种是待分类样本所有的取值情况在训练集中均存在,另外一种情况是待分类样例出现了训练集中没有的变量,或者已有变量上的某个值(针对离散取值的变量)。在训练集较大的情况下,第一种情况是比较常见的。

       情况一

       第一种情况下的条件概率的计算思路比较直接,P(X_{i}=x_{i}|Y=y)的计算方法如下

                                                                         P(X_{i}=x_{i}|Y=y)=\frac{n(X_{i}=x_{i})}{n(Y=y)}

其中n(Y=y)表示训练集中属于类Y=y的样本数,n(X_{i}=x_{i})表示在属于类Y=y的样本中,第 i 个变量X_{i}取值为x_{i}的样本数

        举个例子说明以上的内容,现需要依据个人房产情况、婚姻状况来判断其时候会拖欠银行贷款,训练集如下表

                                                       ​                  

计算可以得到:
        P(有房=是|No)=3/7                 P(有房=否|No)=4/7

        P(有房=是|Yes)=0                  P(有房=否|Yes)=1

        P(婚姻状况=单身|No)=2/7      P(婚姻状况=离婚|No)=1/7      P(婚姻状况=已婚|No)=4/7

        P(婚姻状况=单身|Yes)=2/3     P(婚姻状况=离婚|Yes)=1/3     P(婚姻状况=已婚|Yes)=0

        以上的条件概率计算,是以样本特征取值为离散值的情况说明的,对于特征连续取值的情况,有两种方法计算其条件概率:

  • 将连续的取值离散化,用相应的离散区间替换连续属性值,通过计算类y的训练样本落入X_{i}对应区间的比例来估计条件概率P(X_{i}|Y=y),显然,估计的误差由离散的方式决定。
  • 可以假设连续特征服从某种概率分布,然后使用训练数据估计概率分布的参数。高斯分布常用来表示连续特征的类条件概率分布,该分布的均值为u,方差为\sigma ^{2}

                                                                 P(X_{i}=x_{i}|Y=y_{i})=\frac{1}{\sqrt{2\pi }\sigma _{ij}}e^{\frac{(x_{i}-u_{ij})^{2}}{2\sigma _{ij}^{2}}}

均值u_{ij}可以用样本均值\bar{x}来估计,方差\sigma _{ij}可以用样本方差s^{ij}来估计。还是用上表的数据,用连续值特征——年收入来说明该方法,当一个人不会拖欠贷款时,我们假设它的年收入服从高斯分布,则

                                                     \bar{x}=\frac{125+100+70+120+60+220+75}{7}=110

                                                    s^{2}=\frac{ (125-110)^{2}+(100-110)^{2}+...+(220-100)^{2}+(75-100)^{2} }{6}=2975

                                                      s=\sqrt{2975}=54.54

给定一个测试记录,当年收入为120K时其条件概率为

                                                        P(120K|Y=No)=\frac{1}{\sqrt{2\pi }54.54}e^{\frac{(120-110)^{2}}{2*2975}}=0.0072

       事实上,对于连续值的概率密度函数,任何一点上的概率值均为0,我们应该计算X_{i}落在区间X_{i}+ \varepsilon内的概率值,\varepsilon是一个非常小的常数,这样可以近似的认为该区间内的概率密度不变。在计算P(X)时,也会有这样一个\varepsilon,应该\varepsilon在计算过程中会抵消掉,或者说我们是需要比较那个类下的后验概率最大,只要计算过程中 \varepsilon 固定,不抵消也无所谓,所以仍然可以采用上面的计算方式。

情况二

      在上面的例子也出现了P(婚姻状况=已婚|Yes)=0,依照朴素贝叶斯分类方法,包含该值所有的条件概率均为0,此时无法分类。对于离散型变量而言,对于这种情况一般采用 m估计方法来计算条件概率

                                                                          P(X_{i}=x_{i}|Y=y_{j})=\frac{n_{c}+\lambda }{n+\lambda m}

式中:

        n_{c}:类y_{j}所包含的样本中,第 i 个变量X_{i}取值为x_{i}的样本的个数

         n:类y_{j}所包含的样本个数

        m:第 i 个变量取值空间中包含值的个数

         \lambda:区间[0,1]上的参数,一般取1

        对于P(婚姻状况=已婚|Yes)的计算,采用m估计方法,计算得到的条件概率为

                                     

                                                                              P=\frac{0+1}{3+3}=\frac{1}{6}

       需要说明的是,情况二中介绍的条件概率计算方法也可以应用于情况一中,但是在同一个朴素贝叶斯模型中,训练和测试、使用时必须使用同一种条件概率计算方法。

3.  朴素贝叶斯分类方法的优缺点

   3.1 优点

  • 对孤立的噪声点和缺失值,朴素贝叶斯分类器是健壮的
  • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练
  • 适用于文本分类

  3.2  缺点  

    • 在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好
    • 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳,这实际上是贝叶斯方法的常见问题
    • 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率,这也是对噪声和确实值保持健壮性带来的副作用
    • 对输入数据的表达形式很敏感
posted @ 2019-05-18 16:33  hgz_dm  阅读(566)  评论(0编辑  收藏  举报