前言
这部分的公式推导较多,涉及到了极大似然估计和贝叶斯估计,要看懂贝叶斯算法一定要明白极大似然估计。
其中贝叶斯算法基于贝叶斯公式,并不作为重点,重点在朴素贝叶斯算法,这里的公式推导很详细,一步步看下来一定会整明白的!!
一、贝叶斯算法
先理解下贝叶斯算法要解决的问题:
-
正向概率: 假设袋子里面有N个白球,M个黑球,伸手进去摸一把,摸出黑球的概率有多大?很简单:M/(N+M)
-
逆向概率: 如果事先并不知道袋子里黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么就可以对此袋子里面的黑白球的比例作出什么样的推测
体会这两个概率问题的不同:正向概率问题已经事先知道概率分布,而逆向概率问题却不知道,那么贝叶斯算法就能派上用场了。
再举个计算题来体会贝叶斯算法(后面还会有一个):
-
有一个人群,男人占60%,女人占40%,男人总是穿长裤,女人则有一半穿长裤一半穿裙子。
正向概率: 随机选取一个人,他(她)穿长裤子的概率和穿裙子的概率多大?
逆向概率: 迎面走来一个穿长裤的学生,只看得见他(她)穿的是长裤,而无法判断其性别,推断出其是女生的概率?
解:假设该群体有U个人,
穿长裤的男人的个数:U*P(男)*P(穿长裤|男)
其中,由题意可知P(男)=0.6,P(穿长裤|男)=1(男人全部穿长裤)
穿长裤的女人个数:U*P(女)*P(穿长裤|女)
-----------------------------------------------------------------------
那么对于正向概率问题——穿长裤的概率和穿裙子的概率分贝为:
P(穿长裤) = P(男)+P(女) * 0.5=0.6 + 0.4 * 0.5 = 0.8
P(穿裙子)=1-P(穿长裤)=P(女)*0.5= 0.2
------------------------------------------------------------------------
对于逆向问题——求该穿长裤的是女生的概率:
穿长裤总数:U*P(男)*P(穿长裤|男)+U*P(女)*P(穿长裤|女)
那么该穿长裤的是女生的概率P(女|穿长裤)=U*P(女)*P(穿长裤|女)/穿长裤总数=U*P(女)*P(穿长裤|女)/(U*P(男)*P(穿长裤|男)+U*P(女)*P(穿长裤|女))
注意到上面的逆向问题中,最后的结果是与总人数(U)无关的(分子分母约分),那么最后的结果可以写成
P(女∣穿长裤)=P(男)∗P(穿长裤∣男)+P(女)∗P(穿长裤∣女)P(女)∗P(穿长裤∣女)(1)
化简下(1)式,观察(1)发现其分母就是穿长裤的概率P(穿长裤),分子P(穿长裤,女),那么此处就可以给出贝叶斯公式了:
P(A∣B)=P(B)P(B∣A)P(A)(2)
通俗的说直接求P(A∣B)困难,那么就用上式转换下,换成好求的值(大白话)。
那么讲些官话:
贝叶斯定理是随机事件A和B的条件概率:
P(A∣B)=P(B)P(B∣A)P(A)
其中P(A|B)是在 B 发生的情况下 A 发生的可能性。
成分定义如下:
- P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。
- P(A|B)是已知 B 发生后 A 的条件概率,也由于得自 B 的取值而被称作 A 的后验概率。
- P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。
- P(B)是 B 的先验概率,也作标淮化常量(normalizing constant)。
根据上面的定义,贝叶斯定理可表述为:
后验概率=(似然∗先验概率)/标淮化常量
算法示例
这里借用其他博文的一个例子吧(不同任务算法不同,这里就不要脸的抄了):
假设有两个各装了100个球的箱子,甲箱子中有70个红球,30个绿球,乙箱子中有30个红球,70个绿球。假设随机选择其中一个箱子,从中拿出一个球记下球色再放回原箱子,如此重复12次,记录得到8次红球,4次绿球。问题来了,你认为被选择的箱子是甲箱子的概率有多大?
刚开始选择甲乙两箱子的先验概率都是50%,因为是随机二选一(这是贝叶斯定理二选一的特殊形式)。即有:
P(甲) = 0.5, P(乙) = 1 - P(甲);
这时在拿出一个球是红球的情况下,我们就应该根据这个信息来更新选择的是甲箱子的先验概率:
P(甲|红球1) = P(红球|甲) × P(甲) / (P(红球|甲) × P(甲) + (P(红球|乙) × P(乙)))
P(红球|甲):甲箱子中拿到红球的概率
P(红球|乙):乙箱子中拿到红球的概率
因此在出现一个红球的情况下,选择的是甲箱子的先验概率就可被修正为:
P(甲|红球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7
即在出现一个红球之后,甲乙箱子被选中的先验概率就被修正为:
P(甲) = 0.7, P(乙) = 1 - P(甲) = 0.3
代码:
def bayesFunc(pIsBox1, pBox1, pBox2):
return (pIsBox1 * pBox1)/((pIsBox1 * pBox1) + (1 - pIsBox1) * pBox2)
def redGreenBallProblem():
pIsBox1 = 0.5
# consider 8 red ball
for i in range(1, 9):
pIsBox1 = bayesFunc(pIsBox1, 0.7, 0.3)
print ("拿到 %d 个球是红球是甲箱子的先验概率: %f" % (i, pIsBox1))
# consider 4 green ball
for i in range(1, 5):
pIsBox1 = bayesFunc(pIsBox1, 0.3, 0.7)
print ("拿到 %d 个球是绿球是甲箱子的先验概率: %f" % (i, pIsBox1))
redGreenBallProblem()
结果:
还有一个贝叶斯手写字体识别示例
二、朴素贝叶斯分类器
1、贝叶斯决策论
先定义一些变量:
- 假设一个数据集有N种标记(标签),即γ={c1,c2,...,cN}
- 用λij表示将一个真实标记为cj的样本误分类为ci所产生的损失
- 基于后验概率P(ci∣x)可获得将样本x分类为cj所产生的期望损失,也是在样本x上的条件风险:R(ci∣x)=j=1∑NλijP(cj∣x)(3)
贝叶斯算法的目的就是最小化(3)式损失、风险,即找到一个算法h∗,使得总体风险最小化:
R(h)=Ex[R(h(x)∣x)](4)
若h能最小化每个样本xi的条件风险R(h(x)∣x),则总体风险R(h)也将是最小的。这就产生了贝叶斯判定准则: 为了最小化总体风险,只需在每个样本上选择那个能使条件风险R(c∣x)最小的类别标记,即:
h∗(x)=c∈γargminR(c∣x)(5)
(一定要看懂(5)式,这里再强调下,R(c∣x)是对单个样本来说所产生的条件风险,而算法h∗(x)的输入也是单个样本,也就是说,给算法h∗(x)传入一个样本,输出的是一个类别标记,而这个类别标记满足使得条件风险R(c∣x)最小的要求)
此时,h∗被称为贝叶斯最优分类器,R(h∗)称为贝叶斯风险,1−R(h∗)反映了分类器所能达到的最好性能。(5)式只能最为求解贝叶斯最优分类器h∗的理论指导,并不能据此直接求解出h∗,所以要进一步推进!
下面进一步讨论条件风险::::::::::::::
从(3)式可知条件风险的计算公式为:
R(ci∣x)=j=1∑NλP(cj∣x)
若目标是最小化分类错误率,则误判损失λij
对应为0/1损失,即:
λij={01,ifi=j,otherwise(6)
将(6)带入(3)式:
R(c∣x)=λi1∗P(c1∣x)+λi12∗P(c2∣x)+...+λii∗P(ci∣x)+λii+1∗P(ci+1∣x)+...+λiN∗P(cN∣x)=1∗P(c1∣x)+...+1∗P(ci−1∣x)+0∗P(ci∣x)+1∗P(ci+1∣x)+...+1∗P(cN∣x)(7)
(7)式中去掉乘0项,并由P(c1∣x)+P(c2∣x)+...+P(cN∣x)=1得:
R(c∣x)=P(c1∣x)+...+P(ci−1∣x)+P(ci+1∣x)+...+P(cN∣x)=1−P(ci∣x)(8)
那么由贝叶斯最优分类器的判定准则可知,最小化错误率的贝叶斯最优分类器为:
h∗(x)=c∈γargminR(c∣x)=c∈γargmin(1−P(c∣x))=c∈γargmaxP(c∣x)
这样看来,最开始要根据风险最小找最优贝叶斯分类器,那么就等价于使得后验概率P(c∣x)最大化。所以下面就开始求最大的后验概率P(c∣x)。
2、多元正太分布参数的极大似然估计
如果关于极大似然估计不了解,可以看我的另一篇博文——极大似然估计和贝叶斯估计
至于这块为什么突然来了个“多元正太分布参数的极大似然估计”,因为后面的朴素贝叶斯算法会用到,所以这块也要推明白。
已知对数似然函数为:
LL(θc)=x∈Dc∑logP(x∣θc)(9)
注意上式中兵没有规定对数函数的底数是多少,但是只要保证这个对数函数是单调递增的就可以,所以在这里取自然常数e,那么此时的对数似然函数可以写成:
LL(θc)=x∈Dc∑lnP(x∣θc)(10)
这里已经假设数据集服从多元正态分布的,即:
P(x∣θc)=P(x∣c)∼N(μc,σc2)(11)
所以有
P(x∣θc)=(2π)d∣Σc∣1exp[−21(x−μc)TΣc−1(x−μc)](12)
(12)式不太好理解,这里解释一下。先看整体是正态分布的形式,而且这是多元函数的正太分布;再分别看:其中d表示x的维数,Σc=σc2为对称正定协方差矩阵,∣Σc∣表示Σc的行列式。
将式(12)带入(10)中:
LL(θc)=x∈Dc∑ln[(2π)d∣Σc∣1exp(−21(x−μc)TΣc−1(x−μc))](13)
令∣Dc∣=N(表示属于c类别的集合的样本总数),则对数似然函数可化为:
LL(θc)=i=1∑Nln[(2π)d∣Σc∣1exp(−21(xi−μc)TΣc−1(xi−μc))]=i=1∑Nln[(2π)d1∣Σc∣1exp(−21(xi−μc)TΣc−1(xi−μc))]=i=1∑N[ln(2π)d1+ln∣Σc∣1+ln[exp(−21(xi−μc)TΣc−1(xi−μc))]]=i=1∑N[−2dln(2π)−21ln∣Σc∣−21((xi−μc)TΣc−1(xi−μc))]=−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)(14)
这里的参数θ就是指μc和Σc,所以下面分别求导数:
∂μc∂LL(θc)=∂μc∂[−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=∂μc∂[−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=−21i=1∑N∂μc∂[(xi−μc)TΣc−1(xi−μc)]=−21i=1∑N∂μc∂[(xiT−μcT)Σc−1(xi−μc)]=−21i=1∑N∂μc∂[(xiT−μcT)(Σc−1xi−Σc−1μc)]=−21i=1∑N∂μc∂[xiTΣc−1Txi−xiTΣc−1μc−μcTΣc−1xi+μcTΣc−1μc](15)
由于xiTΣc−1μc的计算结果为标量,并且Σc为实对称矩阵,所以:xiTΣc−1μc=(xiTΣc−1μc)T=xiT(Σc−1)Tμc=xiT(ΣcT)−1μc=μcTΣc−1xi(16)
所以式(15)可以化简如下:
∂μc∂LL(θc)=−21i=1∑N∂μc∂[xiTΣc−1xi−2xiTΣc−1μc+μcTΣc−1μc]=−21i=1∑N[0−(2xiTΣc−1)T+(Σc−1+(Σc−1)T)μc]=−21i=1∑N[−(2(Σc−1)Txi)+(Σc−1+(Σc−1)T)μc]=−21i=1∑N[−(2Σc−1xi)+2Σc−1μc]=i=1∑NΣc−1xi−NΣc−1μc(17)
令上式等于0,可得:
∂μc∂LL(θc)=i=1∑NΣc−1xi−NΣc−1μc=0(18)
即:NΣc−1μc=i=1∑NΣc−1xi=Σc−1i=1∑Nxi(19)
上式两边同乘Σc,得:Nμc=i=1∑Nxi(20)
那么最后可得μc:
μc=N1i=1∑Nxi(21)
下面开始求Σc:
∂Σc∂LL(θc)=∂Σc∂[−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=∂Σc∂[−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=−2N∂Σc∂(ln∣Σc∣)−21i=1∑N∂Σc∂[(xi−μc)TΣc−1(xi−μc)](22)
上式涉及到矩阵求偏导,由矩阵微分公式∂X∂∣X∣=∣X∣(X−1)T,∂X∂aTX−1b=−X−TabTX−T可得:
∂Σc∂LL(θc)=−2N∣Σc∣1∣Σc∣(Σc−1)T−21i=1∑N[−Σc−T(xi−μc)(xi−μc)TΣc−T]=−2N(Σc−1)T−21i=1∑N[−Σc−T(xi−μc)(xi−μc)TΣc−T]=−2NΣc−1+21i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1](23)
令上式偏导数等于0,可得:
∂Σc∂LL(θc)=−2NΣc−1+21i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1]=0(24)
下面开始化简式(24),由(24)式可知:
NΣc−1=i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1](25)
将等式右边的Σc−1提出来:
NΣc−1=Σc−1[i=1∑N(xi−μc)(xi−μc)T]Σc−1(26)
上式左右两边同乘Σc,得:
N=Σc−1[i=1∑N(xi−μc)(xi−μc)T](27)
那么最终得到Σc为:
Σc=N1i=1∑N(xi−μc)(xi−μc)T(28)
3、朴素贝叶斯分类器
已知最小化分类错误率的贝叶斯最优分类器为:
h∗(x)=c∈γargmaxP(c∣x)(29)
又由贝叶斯定理可知:
P(c∣x)=P(x)P(x,c)=P(x)P(c)P(x∣c)(30)
把式(30)带入到(29)中
h∗(x)=c∈γargmaxP(x)P(c)P(x∣c)=c∈γargmaxP(c)P(x∣c)(31)
这里需要明白,为什么上式中的分母P(x)可以不计呢?还是回到贝叶斯判定准则,即找到使风险最小的标记c,那么这里的P(x)的分布是与标记c无关的,在变动c的时候P(x)是恒定不变的,所以可以去掉。
式(31)是普通贝叶斯最优分类器的表达式,那么朴素贝叶斯分类器就是在此基础上加上一个属性条件独立性假设,这也是所谓的“朴素”体现所在.
下面开始推导朴素贝叶斯分类器:
已知属性条件独立性假设为:
P(x∣c)=P(x1,x2,...,xd∣c)=i=1∏dP(xi∣c)(32)
所以:
h∗(x)=c∈γargmaxP(c)i=1∏dP(xi∣c)(33)
式(33)即为朴素贝叶斯分类器表达式。
现在解释下式(32),根据概率论的知识可以知道,式(32)表达了x1,x2,...,xd是相互独立的、相互不相关的,而这显然是不符合实际情形的,因为任何一个物品属性之间多多少少都应该有或多或少的关系,并不能说完全独立、完全不相关的。那么为什么要做属性之间相互独立的这种很强的假设呢?目的就是为了简便计算,也就是牺牲准确率,来换取效率。那么它是怎么简便计算的呢?下面举个简单地例子来说明:
假设某个数据集只有两个属性x1,x2,其中x1=(a,b,c),x2=(d,e,f),其对应的类别标记为c=(1,2,3),现在想学习一个分类器,要把所有的参数都学习出来。这里所谓的所有的参数都学习出来,就是指各种属性取值前提下的联合概率,一共有27种联合概率(333)。现在有两种计算方案,其一是假设属性之间不独立,其二是假设属性之间是独立的。如果不独立的话就需要计算27次,而假设独立的前提下18次。(这块需要点概率论基础,看不懂的可以在下面评论,但是不懂也罢,只需要知道朴素贝叶斯可以降低计算量就可以了)
下面推导朴素贝叶斯的参数估计,怎样求先验概率P(c)和似然概率P(xi∣c):
对于先验概率P(c):
它表示的是样本空间中各类样本所占比例,根据大数定理,当训练集包含充足的独立同分布样本时,P(c)可通过各类样本出现的频率来进行估计,即:P(c)=∣D∣∣Dc∣(34)
其中,D表示训练集,|D|表示D中样本个数,Dc表示训练集中第c类样本组成的集合,∣Dc∣表示集合Dc中样本的个数
对于似然概率P(xi∣c)(这里以一元为例,多元正太分布的参数求解上面有)
这里需要分两种情况讨论:连续型和离散型。
若样本的第i个属性xi取值为连续值,假设该属性的取值服从正态分布:
P(xi∣c)∼N(xc,i,σc,i2)=>P(xi∣c)=2πσc,i1exp(−2σc,i2(xi−μc,i)2)(35)
其中正态分布的参数可以用极大似然估计(区别于由大数定理得到的频率值)法推得:μc,i和σc,i2即为第c类样本在第i个属性上取值的均值和方差。
若样本的第i个属性xi取值为离散值,同样根据极大似然估计法,用其频率值作为其概率值的估计值,即:
P(x∣c)=∣Dc∣∣Dc,xi∣(36)
其中,Dc,xi表示Dc中第i 个属性上取值为xi的样本组成的集合。
那么到此关于贝叶斯和朴素贝叶斯算法已经说完了,公式全部是手敲,这部分的算法公式又多,难免会存在遗漏、敲错等现象,还望指正!