机器学习十大算法之一:朴素贝叶斯Bayes

机器学习十大算法之一:朴素贝叶斯Bayes


1 课题导入

1.1 贝叶斯公式

01-贝叶斯公式.png-8.9kB
P(AB)=P(A)+P(B)P(AB)
P(AB)=P(A|B)P(B)=P(B|A)P(A)
贝叶斯公式:

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

1.2 先验概率、后验概率、可能性

先验概率:先验概率仅仅依赖于主观上的经验估计,也就是事先根据已有的知识的推断,先验概率就是没有经过实验验证的概率,根据已知进行的主观臆测。
eg: 抛一枚硬币,在抛之前,主观推断P(正面朝上) = 0.5

后验概率: 后验概率是指在得到“结果”的信息后重新修正的概率,如贝叶斯公式中的。是“执果寻因”问题中的”果”。先验概率与后验概率有不可分割的联系,后验概率的计算要以先验概率为基础。解释下来就是,在已知果(B)的前提下,得到重新修正的因(A)的概率P(A|B),称为A的后验概率,也即条件概率。后验概率可以通过贝叶斯公式求解。

P(e|H) 就是似然函数,P(e)相当于是一个归一化项,整个公式就是表达了“后验概率正比于先验概率乘以似然函数”。

02-先验与后验.png-189.5kB

1.3 概率基础知识

1.3.1 条件概率

         是指事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为:P(A|B),读作“在B条件下A的概率”。
P(A|B)=P(AB)/P(B)
P(B|A)=P(AB)/P(A)
所以:P(A|B)=P(B|A)P(A)/P(B)

1.3.2 全概率公式

P(B)=i=1nP(Ai)P(B|Ai)

1.3.3 贝叶斯公式

P(Ai|B)=P(B|Ai)P(Ai)i=1nP(B|Ai)P(Ai)

1.3.4 拉普拉斯平滑

a. 拉普拉斯平滑的意义

        为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。
         假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

b. 拉普拉斯平滑公式

         公式P(yk|x)=P(yk)P(xi|yk) ,是一个多项乘法公式,其中有一项数值为0,则整个公式就为0,显然不合理,避免每一项为零的做法就是,在分子、 分母上各加一个数值。

P(y)=(Dy+1)/(D+N)
  • 其中:分子 - 每个分类Dy 加1,为了避免零概率的出现;
  • 分母D+N,N为分类总数,必须为N,这样才能保证最后概率的总和为1
  • 案例1:现在有3个类别,A类有3个样本,B类有2个样本,C类有5个样本。根据拉普拉斯平滑公式:
    P(A)=(3+1)/(3+2+5+3)=4/13    
    P(B)=(2+1)/(3+2+5+3)=3/13    
    P(C)=(5+1)/(3+2+5+3)=6/13

P(xi|D)=(Dxi+1)/(D)+N

  • 其中:D表示样本空间
  • xi 表示第i 个分类
  • Dxi 表示xi 类别中的样本数

     在实际的使用中也经常使用加α(1≥α≥0)来代替简单加1。 如果对N个计数都加上α, 这时分母也要记得加上N*α。

c. 在使用朴素贝叶斯进行多分类算法实现时,才会需要用到拉普拉斯平滑,smooth系数:分子+α,分母+n*α

例题:

【例】发生一起汽车撞人逃跑事件,已知只有两种颜色的车,比例为蓝色15%,绿色85%,目击者指证是蓝车,但根据现场分析,当时那种条件目击者看正确车的颜色的可能性是80%,那么,肇事的车是蓝车的概率到底是多少()?
A.15%          B.41%          C.80%          D.83%
解:

  • 设A={目击者看到车是蓝色的}, B={车的实际颜色是蓝色}
    P(A)=80%×15%+20%×85%=29%
    即: 车是蓝色(15%)×目击者看正确(80%)+车是绿色(85%)×目击者看错了(20%)
    P(AB)=80%×15%=12%
    即: 车是蓝色(15%)×目击者看正确(80%)
    P(B|A)=P(AB)/P(A)=12%/29%≈41%

1.5 朴素贝叶斯分类流程

         对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别:

  • 1.x={a1,a2,,am} 为待分类项,每个a为x的一个特征属性;
  • 2.有类别集合C={y1,y2,,ym}
  • 3.计算P(y1|x),P(y2|x),,P(ym|x)
  • 4.如果P(yk|x)=max{P(y1|x),P(y2|x),,P(yn|x),},xyk

                                    03-贝叶斯分类基本流程.png-127.7kB

第一阶段——准备阶段

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

第二阶段——分类器训练阶段

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

第三阶段——应用阶段。

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

1.6 连续变量贝叶斯计算

         下面将重点讨论特征属性是连续值的情况:当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:

g(x,μ,σ)=12πσexμ22σ2

而:
P(ak|yi)=g(ak,μk,σk)

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

1.7 案例:

         对于SNS社区来说, 不真实账号(使用虚假身份或用户的小号) 是一个普遍存在的问题,作为SNS社区的运营商,希望可以检测出这些不真实账号, 从而在一些运营分析报告中避免这些账号的干扰,亦可以加强对SNS社区的了解与监管。
         如果通过纯人工检测,需要耗费大量的人力,效率也十分低下,如能引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是要将社区中所有账号在真实账号和不真实账号两个类别上进行分类,下面我们一步一步实现这个过程。

  • 首先设C=0表示真实账号, C=1表示不真实账号。

1.7.1 确定特征属性及划分

         这一步要找出可以帮助我们区分真实账号与不真实账号的特征属性,在实际应用中,特征属性的数量是很多的,划分也会比较细致,但这里为了简单起见,我们用少量的特征属性以及较粗的划分,并对数据做了修改。
我们选择三个特征属性:a1:日志数量/注册天数,a2:好友数量/注册天数,a3:是否使用真实头像。在SNS社区中这三项都是可以直接从数据库里得到或
计算出来的。下面给出划分:
a1{a<=0.05,0.05<a<0.2,a>=0.2}
a2{a<=0.1,0.1<a<0.8,a>=0.8}
a3{a=0,a=1}

1.7.2 获取训练样本

         这里使用运维人员曾经人工检测过的1万个账号作为训练样本。

1.7.3 计算训练样本中每个类别的频率

         用训练样本中真实账号和不真实账号数量分别除以一万,得到:
P(C=0)=8900/10000=0.89
P(C=1)=1100/10000=0.11

1.7.4 计算每个类别条件下各个特征属性划分的频率:

04概率计算-1.png-48.9kB    04概率计算-2.png-43.4kB

1.7.5 使用分类器进行鉴别

         下面我们使用上面训练得到的分类器鉴别一个账号,这个账号使用非真实头像,日志数量与注册天数的比率为0.1,好友数与注册天数的比率为0.2。
04概率计算-3.png-71.3kB
         可以看到,虽然这个用户没有使用真实头像,但是通过分类器的鉴别,更倾向于将此账号归入真实账号类别。
这个例子也展示了当特征属性充分多时,朴素贝叶斯分类对个别属性的抗干扰性。

1.8 朴素贝叶斯优缺点总结

1.8.1 优点:

  • 1.算法逻辑简单,易于实现(算法思路很简单,只要使用贝叶斯公式转化即可!)
  • 2.分类过程中时空开销小( 假设特征相互独立, 只会涉及到二维存储)

1.8.2 缺点

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

2 半朴素贝叶斯

2.1 半朴素贝叶斯定义

         在朴素的分类中,我们假定了各个属性之间的独立,这是为了计算方便,防止过多的属性之间的依赖导致的大量计算。这正是朴素的含义,虽然朴素贝叶斯的分类效果不错,但是属性之间毕竟是有关联的,某个属性依赖于另外的属性,于是就有了半朴素贝叶斯分类器:

P(c|x)P(c)i=0nP(xi|c,pai)

         在正式进行计算的时候,将另外一个依赖的属性加进去,计算量不会复杂太多,由于是基于“计数”,所以基本和朴素的计算方式类似。

2.2 超父ODE算法:SPODE

         因此,对某个样本x 的预测朴素贝叶斯公式就由如下:

h(x)=max(P(c)i=0dP(xi|c))

修正为如下的半朴素贝叶斯分类器公式:
h(x)=max(P(c)i=0dP(xi|pai))

         从上式中, 可以看到类条件概率P(xi|c) 修改为了xi 依赖于分类c和一个依赖属性pai

2.3 AODE算法

         上述超父ODE算法:SPODE。显然,这个算法是每个属性值只与其他唯一一个有依赖关系。基于它之上,又提出另一种基于集成学习机制,更为强大的独依赖分类器,AODE,算法思路很简单,就是在SPODE算法的基础上在外面包一个循环,就是尝试将每个属性作为超父属性来构建SPODE,请看下面的公式, 在SPODE外面包了一个循环,然后求它们的和作为当前预测样本的分类:

h(x)=max(j=1dP(c,xj)i=0dP(xi|c,xi))

2.4 确定依赖

2.4.1 SOPDE方法。

         这种方法是假定所有的属性都依赖于共同的一个父属性。

2.4.2 TAN方法。

         每个属性依赖的另外的属性由最大带权生成树来确定。
         (1) 先求每个属性之间的互信息来作为他们之间的权值。
         (2) 构件完全图。权重是刚才求得的互信息。然后用最大带权生成树算法求得此图的最大带权的生成树。
         (3) 找一个根变量, 然后依次将图变为有向图。
         (4) 添加类别y到每个属性的的有向边。

2.4.3 ODE-独依赖估计

         朴素贝叶斯与两种半朴素贝叶斯分类器所考虑的属性依赖关系, 假定每个属性仅依赖于其他最多一个属性,称其依赖的这个属性为其超父属性,这种关系称为:独依赖估计(ODE)。
05半朴素贝叶斯依赖.png-63.1kB

2.5 案例

2.5.1 题目要求

06案例.png-115.3kB
         测试集上要预测的某个样本如下:
06-案例.png-27.5kB

2.5.2 解题

         采用拉普拉斯修正后的先验概率P(c)的计算公式:P(c)=Dc+1D+N
         基于类c和类外的依赖属性pai的条件概率计算公式:P(xi|c,pai)=Dc,pai,xi+1Dc,pai+Ni
属性的依赖关系定义如下:
大小的依赖属性为:形状,且属性取值为大时依赖形状为圆形;
颜色不存在依赖属性;
形状的依赖属性为大小,且属性取值为圆形时依赖大小为大;
则先验概率 P(c) :
P(c = 好果) = (4+1) / (10+2) = 5/12
P(c = 一般) = (6+1) / (10+2) = 7/12
带有依赖属性的类条件概率:
P(大小=大 | c=好果, 形状=圆形) = (2+1)/(3+2) = 3/5
P(颜色=青色 | c=好果) = (0+1) /(4+2) = 1/6
P(形状=圆形 | c=好果, 大小=大) = (2+1) / (3+2) = 3/5
P(大小=大 | c=一般, 形状=圆形) = (1+1) /( 2+2) = 2/4
P(颜色=青色 | c=一般) = (5+1)/(6+2) = 6/8
P(形状=圆形 | c=一般, 大小=大) = (1+1)/(3+2) = 2/5
P(c=好果) * P(大小=大 | c=好果, 形状=圆形) * P(颜色=青色 | c=好果) * P(形状=圆形 | c=好果, 大小=大)
= 5/12 * 3/5 * 1/6 * 3/5 = 0.025
P(c=一般) * P(大小=大 | c=一般, 形状=圆形) * P(颜色=红色 | c=一般) * P(形状=圆形 | c=一般, 大小=大)
= 7/12 * 2/4 * 6/8 * 2/5= 0.0875
因此, 测试集上要预测的这个样本和朴素贝叶斯分类器要预测的结果是相同的, 都为一般的果子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章