朴素贝叶斯算法与贝叶斯估计

来源:互联网 发布:mysql sql 表添加字段 编辑:程序博客网 时间:2024/05/20 08:22

在看贝叶斯算法的相关内容时,你一定被突如其来的数学概念搞得头昏脑涨。比如极大似然估计(Maximum likelihood estimation ),极大后验概率估计(Maximum a posteriori estimation),先验概率(Prior probability),后验概率(Posteriori probability)等。所以后面我就本着先学会用,再谈概念的路线来进行。

1. 朴素贝叶斯算法

先说结论: 朴素贝叶斯就是用贝叶斯公式外加“朴素”的条件来求解样本所属类别的概率

1.1 理解朴素贝叶斯

先不予证明的给出条件概率公式,以及贝叶斯定理(公式)

P(A|B)=P(AB)P(B)P(Ai|B)=P(Ai)P(B|Ai)ni=1P(Ai)P(B|Ai)(1.1)(1.2)

设输入空间Rn,为n维向量的集合,输出空间为类标记={c1,c2,...,cm}.输入为特征向量x,输出为类标记yX是定义在输入空间上的随机向量,Y是定义在输出空间上的随机变量。也就是说X是一个m×n的矩阵,y为类标签。训练集:

T={(x1,y1),(x2,y2),...,(xm,ym)}

则有:

P(Y=ck)=#ckm,k=1,2,...,K(#ck)P(X=x|Y=ck)=P(X(1)=x(1),...,X(n)=x(n)|Y=ck)(1.3)(1.4)

又因为朴素贝叶斯对条件概率分布做了条件独立性假设,即有P(AB|D)=P(A|D)P(B|D),而这也是“朴素”一词的由来,因此公式(1.4)可写成如下形式:

P(X=x|Y=ck)=i=1nP(X(i)=x(i)|Y=ck)(1.5)

由贝叶斯公式(1.2)可知:

P(Y=ck|X=x)P(X=x|Y=ck)P(Y=ck)ni=1P(X=x|Y=ci)P(Y=ci)(1.6)

根据公式(1.6)我们可以计算出任一样本xi属于类别ck的概率,选择其中概率最大者便可作为其分类的类标。但我们发现,(1.6)中,对于每个样本的计算都有相同的分母,因此可以略去。则再代入公式(1.5),可化简为:

y=argmaxckP(Y=ck)i=1nP(X(i)=x(i)|Y=ck)(1.7)

注:y=argmaxck的含义是,取使得y最大时的ck的值


说了这么多,可能还是云里雾里的,举个例子就明白了:

试由下表的训练集学习一个朴素贝叶斯分类器,并确定x=(2,S)T的类标记y。表中X(1),X(2)为特征,取值集合分别为A1={1,2,3},A2={S,M,L},Y为类标记,YC={1,0}

X(1)X(2)Y11S021M031M141S151S062S072M082M192L1102L1113L1123M1133M1143L1153L0

易知:

P(Y=1)=915,P(Y=0)=615P(X(1)=1|Y=1)=29,P(X(1)=2|Y=1)=39,P(X(1)=3|Y=1)=49P(X(2)=S|Y=1)=19,P(X(2)=M|Y=1)=49,P(X(2)=L|Y=1)=49P(X(1)=1|Y=0)=36,P(X(1)=2|Y=0)=26,P(X(1)=3|Y=0)=16P(X(2)=S|Y=0)=36,P(X(2)=M|Y=0)=26,P(X(2)=L|Y=0)=16

以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。

对于给定的x=(2,S)T:

P(Y=1)P(X(1)=2|Y=1)P(X(2)=S|Y=1)=9153919=145P(Y=0)P(X(1)=2|Y=0)P(X(2)=S|Y=0)=6152636=115

于是我们可以知道,样本x=(2,S)T属于y=0.

1.2 概念解释

  • 先验概率: 所谓先验概率指的就是根据以往经验得出来的概率;
    例如,可以通过西瓜的颜色,敲的声音来判断是否成熟;因为你已经有了通过颜色和声音来判断的“经验”,不管这个经验是你自己学习的还是别人告诉你的。又如在上面的例子中,在拿到一个新样本的时候,事先上面也不做,我们就可以通过训练集这一历史数据来得出P(Y=0)=615,P(Y=1)=915,因为这是我们通过已有的经验得到的;最后举个例子,办公室失窃了,理论上每个人都可能是小偷;但我们可以根据对每个人的了解,人品分析得出一个可能性,比如张三偷的可能性为20%,李四偷的可能性为30%,而这就被称之为先验概率,是通过历史经验得来的。

  • 后验概率:所谓后验概率指的就是贝叶斯定理(公式)求解的结果;
    例如,上面说的办公室失窃,我们可以通过先验概率知道,张三偷的可能性为20%,李四偷的可能性为30%,但事实是多少呢?那就得通过贝叶斯公式来进行计算了。

  • 极大似然概率估计:所谓极大似然概率估计,就是求解满足某个样本最有可能出现时的概率以及此时的参数值。详见

1.3 求解步骤

输入:
训练数据T={(x1,y1),(x2,y2),...,(xm,ym)},其中xi=(x(1)i,x(2)i,...,x(n)i)Tx(j)i是第i个样本的第j维特征,x(j)i{aj1,aj2,...,ajSj}ajl是第j维特征可能取得第l个值,j=1,2,...,n;l=1,2,...,Sj;yi{c1,c2,...,ck}Sj表示第j为特征可取值个数;
输出:实例x的分类

(1)用极大似然估计计算先验概率及条件概率:

P(Y=ck)=i=1mI(yi=ck)m,k=1,2,...,KP(X(j)=ajl|Y=ck)=i=1mI(x(j)i=ajl,yi=ck)i=1mI(yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K(1.8)(1.9)

注:最好是结合着前面的例子来看公式

(2)对于给定的实例x=(x(1),x(2),...,x(n))T

P(Y=ck)j=1nP(X(j)=x(j)|Y=ck),k=1,2,...,K(1.10)

(3)确定实例x的类别
y=argmaxckP(Y=ck)j=1nP(X(j)=x(j)|Y=ck)(1.11)

2. 贝叶斯估计

从上面我们可以算是大致了解了朴素贝叶斯的过程,但是有一个不能忽略的问题就是:在训练集不充分的情况下,缺少某个维度的条件概率时,(例如,如果P(X(1)=1|Y=1)为0的话)那么在预测的时候,将会产生很大的错差。解决这个问题的办法就是在各个估计中加入平滑项,即贝叶斯估计

Pλ(Y=ck)=i=1mI(yi=ck)+λm+KλPλ(X(j)=ajl|Y=ck)=i=1mI(x(j)i=ajl,yi=ck)+λi=1mI(yi=ck)+Sjλ(2.1)(2.2)

式中λ0.当λ=0时,就是极大似然估计;当λ=1时,称为拉普拉斯平滑(Laplace smoothing),这也是常用的做法。

我们将上面的例子用拉普拉斯平滑(λ=1)再来计算一次。在计算之前我们知道,此时K为类别数2,Sj表示第j个维度可能取值的个数,即S1=3,S2=3

易知:

P(Y=1)=1017,P(Y=0)=717P(X(1)=1|Y=1)=312,P(X(1)=2|Y=1)=412,P(X(1)=3|Y=1)=512P(X(2)=S|Y=1)=212,P(X(2)=M|Y=1)=512,P(X(2)=L|Y=1)=512P(X(1)=1|Y=0)=49,P(X(1)=2|Y=0)=39,P(X(1)=3|Y=0)=29P(X(2)=S|Y=0)=49,P(X(2)=M|Y=0)=39,P(X(2)=L|Y=0)=29

以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。

对于给定的x=(2,S)T:

P(Y=1)P(X(1)=2|Y=1)P(X(2)=S|Y=1)=1017412213=5153P(Y=0)P(X(1)=2|Y=0)P(X(2)=S|Y=0)=7173949=28459

于是我们可以知道,样本x=(2,S)T属于y=0.

3. 概念辨析

对于不同的书,对于一些算法或算法行为有着不同的称谓,有的概念名称甚至连原书作者也拿捏不准,这也导致我们在初学翻阅各种资料时候发现一会儿又多了这个概念,一会儿又多了那个概念,及其痛苦。但是名称不重要,重要的是我们知道所指代的具体东西就行。下面就整理出笔者在学习中遇到过的各种“叫法”,仅供参考。

这里写图片描述
所有的算法都称之为贝叶斯分类器,朴素贝叶斯有三种叫法,加入平滑项后叫贝叶斯估计

4.示例

示例见此处

参考

  • 《统计学习》
  • 《Python与机器学习实战》
  • 《Python机器学习及实践》
  • 《机器学习实战》
原创粉丝点击