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

朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法;朴素贝叶斯并不是贝叶斯定理,也不是贝叶斯估计

一、概率基础知识:

条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。 条件概率表示为: P(A|B), 读作“在B条件下A的概率”。 若只有两个事件A, B, 那么:

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

那么:


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

全概率公式: 表示若事件A1,A2,…,An构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立。


P(B)=P(A1B)+P(A2B)+...+P(AnB)=P(AiB)=P(B|Ai)P(Ai) P ( B ) = P ( A 1 B ) + P ( A 2 B ) + . . . + P ( A n B ) = ∑ P ( A i B ) = ∑ P ( B | A i ) ∗ P ( A i )

贝叶斯公式是将全概率公式带入到条件概率公式当中, 对于事件 Ak A k 和事件B有:

P(Ak|B)=P(B|Ak)P(Ak)P(B|Ai)P(Ai) P ( A k | B ) = P ( B | A k ) ∗ P ( A k ) ∑ P ( B | A i ) ∗ P ( A i )

对于

P(Ak|B) P ( A k | B ) 来说, 分母

P(B|Ai)P(Ai) ∑ P ( B | A i ) ∗ P ( A i ) 为一个固定值, 因为我们只需要比较

P(Ak|B) P ( A k | B ) 的大小,

所以可以将分母固定值去掉, 并不会影响结果。 因此, 可以得到下面公式:


P(Ak|B)=P(Ak)P(B|Ak) P ( A k | B ) = P ( A k ) ∗ P ( B | A k )


P(Ak)P(Ak) P ( A k ) P ( A k ) 先验概率,

P(Ak|B) P ( A k | B ) 后验概率,

P(B|Ak) P ( B | A k ) 似然函数

先验*似然=后验

特征条件独立假设在分类问题中,常常需要把一个事物分到某个类别中。 一个事物又有许多属性,即x=(x1,x2,···,xn)。常常类别也是多个, 即 y=(y1,y2,,yk)P(y1|x),P(y2|x),,P(yk|x) y = ( y 1 , y 2 , · · · , y k ) 。 P ( y 1 | x ) , P ( y 2 | x ) , … , P ( y k | x ) 表示x属于某个分类的概率,那么,我们需要找出其中最大的那个概率P(yk|x), 根据上一步得到的公式可得:

P(yk|x)=P(yk)P(x|yk) P ( y k | x ) = P ( y k ) ∗ P ( x | y k )

就样本x有n个属性: x=(x1,x2,,xn) x = ( x 1 , x 2 , · · · , x n )
所以: P(yk|X)=P(yk)P(x1,x2,,xn|yk) P ( y k | X ) = P ( y k ) ∗ P ( x 1 , x 2 , · · · , x n | y k ) 条件独立假设,就是各条件之间互不影响
所以: P(x1,x2,,xn|yk)=P(xi|yk) P ( x 1 , x 2 , · · · , x n | y k ) = ∏ P ( x i | y k )
最终公式为: P(yk|x)=P(yk)P(xi|yk) P ( y k | x ) = P ( y k ) ∗ ∏ P ( x i | y k )
根据公式 P(yk|x)=P(yk)P(xi|yk) P ( y k | x ) = P ( y k ) ∗ ∏ P ( x i | y k ) 就可以做分类问题了

朴素贝叶斯公式:

P(yk|x)=P(yk)P(xi|yk) P ( y k | x ) = P ( y k ) ∗ ∏ P ( x i | y k )

【例2】一起汽车撞人逃跑事件,已知只有两种颜色的车,比例为蓝色15% 绿色85%,目击者指证是蓝车,但根据现场分析,当时那种条件目击者看正确车的颜色的可能性是

80%,那么,肇事的车是蓝车的概率到底是多少

答案:

设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) x={a1,a2,....,am} x = { a 1 , a 2 , . . . . , a m } 为待分类项, 每个a为x的一个特征属性
(2)有类别集合 C={y1,y2,...,yn} C = { y 1 , y 2 , . . . , y n }
(3)计算 P(y1|x),P(y2|x),...,P(yn|x) P ( y 1 | x ) , P ( y 2 | x ) , . . . , P ( y n | x )
(4)找到 P(yk|x)=max{P(y1|x),P(y2|x),...,P(yn|x)} P ( y k | x ) = m a x { P ( y 1 | x ) , P ( y 2 | x ) , . . . , P ( y n | x ) }

案例如下:待补充。。。

机器学习代码实现的三个阶段:

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

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

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

三、拉普拉斯平滑

为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。
公式P(yk|x) =P(yk) * ∏P(xi|yk), 是一个多项乘法公式, 其中有一项数值为0, 则整个公式就为
0, 显然不合理, 避免每一项为零的做法就是, 在分子、 分母上各加一个数值。

P(y)=|Dy|+1|D|+N P ( y ) = | D y | + 1 | D | + N

|Dy|表示分类y的样本数,|D|样本总数,N是样本总数加上分类总数


P(xi|Dy)=|Dy,xi|+1|Dy|+Ni P ( x i | D y ) = | D y , x i | + 1 | D y | + N i

|Dy,xi|表示分类y属性i的样本数, |Dy|表示分类y的样本数, Ni表示i属性的可能的取值数

例子:

假设在文本分类中,有3个类,C1、C2、C3,在指定的训练样本中, 某个词语K1,在各个类中观测计数分别为0, 990, 10, K1的概率为0, 0.99,0.01,对这三个量使用拉普拉斯平滑的计算方法如下:

1/1003 = 0.001, 991/1003=0.988, 11/1003=0.011

在实际的使用中也经常使用加

λ λ

1λ0 1 ≥ λ ≥ 0 ) 来代替简单加1。 如果对N个计数都加上

λ λ , 这时分母也要记得加上

Nλ N ∗ λ

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

缺点:
理论上, 朴素贝叶斯模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此, 这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时, 分类效果不好。

1-2 半朴素贝叶斯分类器

一、概念:

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

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

h(x)=max(P(c)i=1dP(Xi|c)) h ( x ) = m a x ( P ( c ) ∏ i = 1 d P ( X i | c ) )

修正为如下的半朴素贝叶斯分类器公式:


h(x)=max(P(c)i=1dP(Xi|pai)) h ( x ) = m a x ( P ( c ) ∏ i = 1 d P ( X i | p a i ) )

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

上述超父ODE算法: SPODE。 显然, 这个算法是每个属性值只与其他唯一 一个有依赖关

系。 基于它之上, 又提出另一种基于集成学习机制, 更为强大的独依赖分类器, AODE,

算法思路很简单, 就是在SPODE算法的基础上在外面包一个循环, 就是尝试将每个属性

作为超父属性来构建SPODE, 请看下面的公式, 在SPODE外面包了一个循环, 然后求它

们的和作为当前预测样本的分类:


h(x)=max(j=1dP(c,xj)i=1dP(xi|c,xj)) h ( x ) = m a x ( ∑ j = 1 d P ( c , x j ) ∏ i = 1 d P ( x i | c , x j ) )

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

2.TAN方法。 每个属性依赖的另外的属性由最大带权生成树来确定。

(1) 先求每个属性之间的互信息来作为他们之间的权值。

(2) 构件完全图。 权重是刚才求得的互信息。然后用最大带权生成树算法求得此图的最大带权的生成树。

(3) 找一个根变量, 然后依次将图变为有向图。

(4) 添加类别y到每个属性的的有向边。

3 . 朴素贝叶斯与两种半朴素贝叶斯分类器所考虑的属性依赖关系, 假定每个属性仅依赖于

其他最多一个属性, 称其依赖的这个属性为其超父属性, 这种关系称为: 独依赖估计

(ODE) 。

点赞