数据挖掘---朴素贝叶斯法

一、概率知识复习

  • 条件概率

        在实践B发生的条件下实践A发生的概率。条件概率表示为P(A|B).

  • 联合概率

        事件A与事件B都发生的概率,记为P(AB)或P(A, B)。P(A, B) = P(A|B) * P(B)

        由 P(A, B) = P(A|B) * P(B) = P(B|A) * P(A)可推出:

                                     

  • 全概率

        如果事件B1、B2、B3…Bn 构成一个完备事件组,即它们两两互不相容,其和为全集;并且P(Bi)大于0,则对任一事件A有

        P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + ... + P(A|Bn)P(Bn)

二、朴素贝叶斯分类原理

        朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,它假设输入的不同特征之间是独立的。假设所有相关概率已知,基于这些概率来选择最优的类别,是朴素贝叶斯解决的一种典型问题。

        朴素贝叶斯定理体现了后验概率 P(y|x) 、先验概率 P(y)、条件概率 P(x|y) 之间的关系: 

                                       
 

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

1、设为一个待分类项,而每个a为x的一个特征属性。

2、有类别集合

3、计算

4、如果,则

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

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

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

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

      

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

      

三、朴素贝叶斯分类案例

以垃圾邮件过滤为例:

(一)基本方法 
现在我们收到一封新邮件,我们假定它是正常邮件和垃圾邮件的概率各是50%。即:P(正常)= P(垃圾)=50%

然后,对这封新邮件的内容进行解析,发现其中含有“发票”这个词,那么这封邮件属于垃圾邮件的概率提高到多少?其实就是计算一个条件概率,在有“发票”词语的条件下,邮件是垃圾邮件的概率:P(垃圾|发票)。直接计算肯定是无法计算了,这时要用到贝叶斯定理: 

其中,P(发票|垃圾)表示所有垃圾邮件中出现“发票”的概率,我们假设100封垃圾邮件中有5封包含“发票”这个词,那么这个概率是5%。P(发票|正常)表示所有正常邮件中出现“发票”的概率,我们假设1000封正常邮件中有1封包含“发票”这个词,那么这个概率是0.1%。于是:

P(垃圾|发票)=(5%×50%) / (5%×50% + 0.1%×50%)

因此,这封新邮件是垃圾邮件的概率是98%。从贝叶斯思维的角度,这个“发票”推断能力很强,直接将垃圾邮件50%的概率提升到98%了。那么,我们是否就此能给出结论:这是封垃圾邮件?

回答是不能!这里有2个核心问题没有解决: 
一是 P(发票|垃圾)和P(发票|正常)是我们假定的,怎样实际计算它们? 
二是 正常邮件也是可能含有“发票”这个词的,误判了怎么办?

(二)概率值计算问题 
对于第一个问题,该“统计学”出场了。过程很简单,我们首先收集10000封邮件,用人工方式进行简单判断标定,哪个是正常邮件,哪个是垃圾邮件,假设各有5000封,即P(正常)= P(垃圾)=50%。然后编写程序解析所有邮件的内容文本,提取每一个词,计算每个词语在正常邮件和垃圾邮件中的出现频率。例如“发票”在5000封正常邮件中,出现了5次,那么P(发票|正常)=0.1%,“发票”在5000封垃圾邮件中个,出现了250次,那么P(发票|正常)=1%。以后,就全自动运行,随着邮件数量的增加,这些计算结果会自动调整,越来越精确。(注意:如果一个词只出现在垃圾邮件中,正常邮件中没有,那么在正常邮件中的出现频率也需要设定一个很小的值(例如0.1%),反之亦然,这样做是为了避免概率为0)。

(三)误判问题 
对于第二个问题,解决的思路是“多特征判断”。就像猫和老虎,如何单看颜色、花纹都不好判断,那就颜色、花纹、大小、体重等一起来判断。同理,对于“发票”不好来判断,那就联合其他词语一起来判断,如果这封邮件中除了“发票”,还有“常年”,“代开”,“各种”,“行业”,“绝对正规”,“税点低”等词语,那么就通过这些词语联合认定这封邮件是垃圾邮件。

计算方法也不复杂,在基本方法计算的基础上,选取前n个(例如n=3,实际应用中是15个词/字以上)概率最高的词,假设为:“发票”,“常年”,“代开”。然后计算其联合条件概率。即在这3个词同时出现的条件下,是垃圾邮件的概率,即:P(垃圾|发票;常年;代开)。这时仍要用到贝叶斯定理: 

即在这3个词同时出现的情况下,是垃圾邮件的概率与是正常邮件的概率的比值。上边式子中的每一项,都可以用前面介绍的统计学方法得到。假设P(常年|垃圾)=P(常年|正常)=5%,P(代开|垃圾)=5%,P(代开|正常)=0.1%。那么:

(5% × 5% × 5% × 50%) / (0.1% × 5% × 0.1% × 50%)=2500

即多个词(或字)联合认定,这封邮件是垃圾邮件概率是正常邮件概率的2500倍,可以确定是垃圾邮件了。


四、常见的朴素贝叶斯模型

以下模型参考博文地址https://blog.csdn.net/u012162613/article/details/48323777

4.1多项式模型

当特征是离散的时候,使用多项式模型。多项式模型在计算先验概率P(y_{k})和条件概率P(x_{}i|y_{}k)时,会做一些平滑处理,具体公式为:

当α=1时,称作Laplace平滑,当0<α<1时,称作Lidstone平滑,α=0时不做平滑。

如果不做平滑,当某一维特征的值x_{}i没在训练样本中出现过时,会导致P(x_{}i|y_{}k)=0,从而导致后验概率为0。加上平滑就可以克服这个问题。

4.2 高斯模型

       当特征是连续变量的时候,运用多项式模型就会导致很多P(x_{}i|y_{}k)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。

例子:下面是一组人类身体特征的统计资料。

已知某人身高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倍,所以判断该人为女性。

4.3 伯努利模型

       与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0).

伯努利模型中,条件概率P(x_{}i|y_{}k)的计算方式是:

当特征值x_{}i为1时,P(x_{}i|y_{}k) = P(x_{}i = 1|y_{}k)

当特征值x_{}i为0时,P(x_{}i|y_{}k) = 1 - P(x_{}i = 1|y_{}k)

五、朴素贝叶斯模型优缺点

朴素贝叶斯的主要优点有:

    1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

    2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

    3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

        4)不存在过拟合的说法。

    朴素贝叶斯的主要缺点有:   

    1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

    2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

    3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

    4)对输入数据的表达形式很敏感。
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值