机器学习之从极大似然估计到最大熵原理以及EM算法详解

一、极大似然估计

极大似然估计是建立在极大似然原理的基础上的一个统计方法,极大似然原理的直观想法是,一个随机试验如有若干个可能的结果A,B,C,… ,若在一次试验中,结果A出现了,那么可以认为实验条件对A的出现有利,也即出现的概率P(A)较大。极大似然原理的直观想法我们用下面例子说明。设甲箱中有99个白球,1个黑球;乙箱中有1个白球.99个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球,这一黑球从乙箱抽取的概率比从甲箱抽取的概率大得多,这时我们自然更多地相信这个黑球是取自乙箱的。一般说来,事件A发生的概率与某一未知参数 θ有关, θ取值不同,则事件A发生的概率P(A|θ)也不同,当我们在一次试验中事件A发生了,则认为此时的θ值应是t的一切可能取值中使P(A|θ)达到最大的那一个,极大似然估计法就是要选取这样的t值作为参数t的估计值,使所选取的样本在被选的总体中出现的可能性为最大。

假设总体分布为f(x,θ),X1,X2,X3...Xn为该总体采样取得的样本。因为X1,X2,X3...Xn是独立同分布的,于是,它的联合密度函数为:

L(X1,X2...Xn;θ1,θ2...θk)=∏i=1nf(xi;θ1,θ2...θk)

在上面这个式子中,θ被看做是确定但是未知的参数,并且应为样本已经存在,所以x1,x2,x3...xn也是固定的。因此L(x,θ)是关于θ的函数,即似然函数。求解参数θ的值,使似然函数取得极大值,这就是极大似然估计。

在实践中,由于求导数的需要,往往将似然函数取对数,得到对数似然函数;如果似然函数可导,那么就可以通过求导数的方式得到驻点,从而算出极大值。

logL(θ1,θ2...θk)=∑ni=1logf(xi;θ1,θ2...θk)
∂L(θ)∂θi=0,i=1,2....k

求极大似然估计量的一般步骤:
(1)写出似然函数;
(2)对似然函数取对数,并整理;
(3)求导数;
(4)解似然方程。

例子:


极大似然估计的特点:

1.比其他估计方法更加简单;
2.收敛性:无偏或者渐近无偏,当样本数目增加时,收敛性质会更好;
3.如果假设的类条件概率模型正确,则通常能获得较好的结果。但如果假设模型出现偏差,将导致非常差的估计结果。



二、最大熵原理

最大熵原理是一种选择随机变量统计特性最符合客观情况的准则,也称为最大信息原理。随机量的概率分布是很难测定的,一般只能测得其各种均值(如数学期望、方差等)或已知某些限定条件下的值(如峰值、取值个数等),符合测得这些值的分布可有多种、以至无穷多种,通常,其中有一种分布的熵最大。选用这种具有最大熵的分布作为该随机变量的分布,是一种有效的处理方法和准则。这种方法虽有一定的主观性,但可以认为是最符合客观情况的一种选择。在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险。在信息处理中,这个原理同样适用。在数学上,这个原理称为最大熵原理。

那么,到底什么是熵呢?简单来说,熵是对平均不确定性的度量:

H(X)=−∑xϵXp(x)lnp(x)

由以上公式可知,熵是随机变量不确定性的度量,不确定性越大,熵也越大;当随机变量变成一个确定的值时,熵就变成了0。需要指出的是均匀分布是“最不确定”的分布。

最大熵的一般模型:

max(pϵP)H(Y|X)=−∑(x,y)p(x,y)logp(y|x)

其中P={p|p是X上满足条件的概率分布}

例子:

假设随机变量X有5个取值{A,B,C,D,E},且满足条件P(A)+P(B)=0.3且P(A)+P(B)+P(C)+P(D)+P(E)=1。求最大熵模型。

为了方便,分别用y1~y5表示A~E,于是最大熵模型的最优化问题是:

min−H(p)=∑5i=1p(yi)logp(yi)

s.t.p(y1)+p(y2)=p˜(y1)+p˜(y2)=310

∑5i=1p(yi)=∑5i=1p˜(yi)=1

引进拉格朗日乘子w0和w1,定义拉格朗日函数如下:

L(p,w)=p(yi)logp(yi)+w1(p(y1)+p(y2)−310)+w0(∑i=15p(yi)−1)

根据拉格朗日对偶性,可以通过求解对偶最优化问题得到原始最优化问题的解。所以求解max min L(p,w)首先需要求解关于p的极小化问题。为此需要固定w0和w1。求偏导数:

∂L(p,w)∂p(y1)=1+logp(y1)+w1+w0

∂L(p,w)∂p(y2)=1+logp(y2)+w1+w0

∂L(p,w)∂p(y3)=1+logp(y3)+w0

∂L(p,w)∂p(y4)=1+logp(y4)+w0

∂L(p,w)∂p(y5)=1+logp(y5)+w0

令上面的五个偏导数都等于0,可求得:

p(y1)=p(y2)=e−w1−w0−1,p(y3)=p(y4)=p(y5)=e−w0−1

把p(y1),p(y2),p(y3),p(y4),p(y5)代入到L(p,w)中,再求L(p,w)关于w的极大化问题:

maxL(pw,w)=−2e−w1−w0−1−3e−w0−1−310w1−w0

分别对w0和w1求偏导,并令其等于0,可以得到:

e−w1−w0−1=320,e−w0−1=730

解得:

p(y1)=p(y2)=320,p(y3)=p(y4)=p(y5)=730

总结:

最大熵模型在分类方法里算是比较优的模型,但是由于它的约束函数的数目一般来说会随着样本量的增大而增大,导致样本量很大的时候,对偶函数优化求解的迭代过程非常慢,scikit-learn甚至都没有最大熵模型对应的类库。但是理解它仍然很有意义,尤其是它和很多分类方法都有千丝万缕的联系。 

优点

a) 最大熵统计模型获得的是所有满足约束条件的模型中信息熵极大的模型,作为经典的分类模型时准确率较高。

b) 可以灵活地设置约束条件,通过约束条件的多少可以调节模型对未知数据的适应度和对已知数据的拟合程度。

缺点

由于约束函数数量和样本数目有关系,导致迭代过程计算量巨大,实际应用比较难。



三、EM算法

首先举一个例子:

现在一个班里有50个男生,50个女生,且男生站左,女生站右。我们假定男生的身高服从正态分布:N(μ1,σ21),女生的身高则服从另一个正态分布:N(μ2,σ22) 。这时候我们可以用极大似然法(MLE),分别通过这50个男生和50个女生的样本来估计这两个正态分布的参数。但现在我们让情况复杂一点,就是这50个男生和50个女生混在一起了。我们拥有100个人的身高数据,却不知道这100个人每一个是男生还是女生。这时候情况就有点尴尬,因为通常来说,我们只有知道了精确的男女身高的正态分布参数我们才能知道每一个人更有可能是男生还是女生。但从另一方面去考量,我们只有知道了每个人是男生还是女生才能尽可能准确地估计男女各自身高的正态分布的参数。这个时候有人就想到我们必须从某一点开始,并用迭代的办法去解决这个问题:我们先设定男生身高和女生身高分布的几个参数(初始值),然后根据这些参数去判断每一个样本(人)是男生还是女生,之后根据标注后的样本再反过来重新估计参数。之后再多次重复这个过程,直至稳定。这个算法也就是EM算法。

假设我们有一个样本集{x1,x2...xm},包含m个独立的样本。但每个样本i对应的类别zi是未知的(相当于聚类),也即隐含变量。故我们需要估计概率模型p(x,z)的参数θ,但是由于里面包含隐含变量z,所以很难用最大似然求解,但如果z知道了,那我们就很容易求解了。

下面我们通过建立极大似然函数来建立目标函数:

l(θ)=∑i=1mlogp(x;θ)=∑i=1mlog∑zp(x,z;θ))

进一步计算可得:

∑ilogp(x(i);θ)==≥∑ilog∑z(i)p(x(i),z(i);θ)(1)∑ilog∑z(i)Qi(z(i))p(x(i),z(i);θ)Qi(z(i))(2)∑i∑z(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))(3)

本质上我们是需要最大化(1)式(对(1)式,我们回忆下联合概率密度下某个变量的边缘概率密度函数的求解,注意这里z也是随机变量。对每一个样本i的所有可能类别z求等式右边的联合概率密度函数和,也就得到等式左边为随机变量x的边缘概率密度),也就是似然函数,但是可以看到里面有“和的对数”,求导后形式会非常复杂(自己可以想象下log(f1(x)+ f2(x)+ f3(x)+…)复合函数的求导),所以很难求解得到未知参数z和θ。那OK,我们可否对(1)式做一些改变呢?我们看(2)式,(2)式只是分子分母同乘以一个相等的函数,还是有“和的对数”啊,还是求解不了,那为什么要这么做呢?咱们先不管,看(3)式,发现(3)式变成了“对数的和”,那这样求导就容易了。我们注意点,还发现等号变成了不等号,为什么能这么变呢?这就是Jensen不等式的大显神威的地方。

Jensen不等式

设f是定义域为实数的函数,如果对于所有的实数x。如果对于所有的实数x,f(x)的二次导数大于等于0,那么f是凸函数。当x是向量时,如果其hessian矩阵H是半正定的,那么f是凸函数。如果只大于0,不等于0,那么称f是严格凸函数。

Jensen不等式表述如下:

如果f是凸函数,X是随机变量,那么:E[f(X)]>=f(E[X])
特别地,如果f是严格凸函数,当且仅当X是常量时,上式取等号。Jensen不等式应用于凹函数时,不等号方向反向。

一般意义上的Jensen不等式可以参考:百度词条:Jensen不等式

回到公式(2),因为f(x)=log x为凹函数(其二次导数为−1x2<0)。

(2)式中∑z(i)Qi(z(i))[p(x(i),z(i);θ)Qi(z(i))]是p(x(i),z(i);θ)Qi(z(i))的期望,(考虑到E(X)=∑x∗p(x),f(x)是x的函数,则E(f(X))=∑f(x)∗p(x),又∑zQi(z(i))=1所以就可以得到公式(3)的不等式了。

OK,到这里,现在式(3)就容易地求导了,但是式(2)和式(3)是不等号啊,式(2)的最大值不是式(3)的最大值啊,而我们想得到式(2)的最大值,那怎么办呢?

现在我们就需要一点想象力了,上面的式(2)和式(3)不等式可以写成:似然函数L(θ)>=J(z,Q),那么我们可以通过不断的最大化这个下界J,来使得L(θ)不断提高,最终达到它的最大值。

见上图,我们固定θ,调整Q(z)使下界J(z,Q)上升至与L(θ)在此点θ处相等(绿色曲线到蓝色曲线),然后固定Q(z),调整θ使下界J(z,Q)达到最大值(θt到θt+1),然后再固定θ,调整Q(z)……直到收敛到似然函数L(θ)的最大值处的θ∗。这里有两个问题:什么时候下界J(z,Q)与L(θ)在此点θ处相等?为什么一定会收敛?

首先第一个问题,在Jensen不等式中说到,当自变量X是常数的时候,等式成立。而在这里,即:

p(x(i),z(i);θ)Qi(z(i))=c

再推导下,由于∑zQi(z(i))=1(因为Q是随机变量z(i)的概率密度函数),则可以得到:分子的和等于c(分子分母都对所有z(i)求和:多个等式分子分母相加不变,这个认为每个样例的两个概率比值都是c),则:

Qi(z(i))=p(x(i),z(i);θ)∑zp(x(i),z;θ)=p(x(i),z(i);θ)p(x(i);θ)=p(z(i)|x(i);θ)

至此,我们推出了在固定参数后,使下界拉升的Q(z)的计算公式就是后验概率,解决了Q(z)如何选择的问题。这一步就是E步,建立L(θ)的下界。接下来的M步,就是在给定Q(z)后,调整θ,去极大化L(θ)的下界J(在固定Q(z)后,下界还可以调整的更大)。

EM算法整体框架:

E步(第一步):
如果是首次运行,则根据先验知识给定一个θ;如果不是,则这个θ就是M步求出来的。利用这个θ和样本x,求出隐变量z的条件概率,即Q。

M步(第二步): 将E步求出的Q带入式1后求出θ的最大值。 重复上面两步,直到收敛。

详细推导过程可以参考:(EM算法)The EM Algorithm

优缺点:

要有一些训练数据,再定义一个最大化函数,采用EM算法,利用计算机经过若干次迭代,就可以得到所需的模型。EM算法是自收敛的分类算法,既不需要事先设定类别也不需要数据见的两两比较合并等操作。缺点是当所要优化的函数不是凸函数时,EM算法容易给出局部最佳解,而不是最优解。

关于怎么更通俗易懂地理解EM算法可以参考以下链接:

https://www.zhihu.com/question/27976634/answer/39132183

https://www.zhihu.com/question/27976634/answer/153567695



理解EM算法的九层境界

参考资料:

  1. 从最大似然到EM算法浅解
  2. 百度文库:极大似然估计
时间: 2024-07-30 13:22:37

机器学习之从极大似然估计到最大熵原理以及EM算法详解的相关文章

机器学习(二)--- 分类算法详解

感觉狼厂有些把机器学习和数据挖掘神话了,机器学习.数据挖掘的能力其实是有边界的.机器学习.数据挖掘永远是给大公司的业务锦上添花的东西,它可以帮助公司赚更多的钱,却不能帮助公司在与其他公司的竞争中取得领先优势,所以小公司招聘数据挖掘/机器学习不是为了装逼就是在自寻死路.可是相比Java和C++语言开发来说,机器学习/数据挖掘确实是新一些老人占的坑少一些,而且可以经常接触一些新的东西.还是赶紧再次抓住机会集中的再总结一下吧,不能再拖拖拉拉了.  其实数据挖掘的主要任务是分类.聚类.关联分析.预测.时

Thrift的TProtocol类体系原理及源码详解:紧凑协议类TCompactProtocolT(TCom

Thrift的TProtocol类体系原理及源码详解:紧凑协议类TCompactProtocolT(TCompactProtocol) 这个协议类采用了zigzag 编码,这种编码是基于Variable-length quantity编码提出来 的,因为Variable-length quantity编码对于负数的编码都需要很长的字节数,而zigzag 编 码对于绝对值小的数字,无论正负都可以采用较少的字节来表示,充分利用了 Varint技术. 所以这个协议类采用zigzag 编码可以节省传输空

Thrift的TProtocol类体系原理及源码详解:二进制协议类TBinaryProtocolT(TBi

Thrift的TProtocol类体系原理及源码详解:二进制协议类TBinaryProtocolT(TBinaryProtocol) 这个协议是Thrift支持的默认二进制协议,它以二进制的格式写所有的数据,基本上直接 发送原始数据.因为它直接从TVirtualProtocol类继承,而且是一个模板类.它的模板参数 就是一个封装具体传输发送的类,这个类才是真正实现数据传输的.这个类的定义上一节举 例已经出现过了就不在列出来了. 下面我就结合scribe的Log函数执行的具体过程来 分析使用这个协

photoshop高低频磨皮的原理和优点深度详解

给各位photoshop软件的使用者们来详细的解析分享一下高低频磨皮的原理和优点. 解析分享:   高低频原理: photoshop高低频磨皮原理就是将图像信息分为两部分,将颜色和光影记录在低频,将文理细节保存到高频;如果我们将这两个频分别提取到两个图层里,我们就可以对其进行单独调整,互不干扰.低频层用来控制图像的颜色光影,调节不会影响到图片细节.高频层我们则用来控制细节而不改变颜色.   优点: 耗时短,掌握高低频磨皮方法后,在保留皮肤质感情况下快速给图像磨皮,而且还可以用于中性灰商业磨皮后期

Thrift的TProtocol类体系原理及源码详解:类继承架构分析

这部分相关的类主要实现与协议相关的内容,这里说的协议是指对数据传输格式封装的协 议,实现不同的协议来适合不同场景下的数据传输,因为在不同的场景下不同协议对于数据 传输来说效率有很大的差别.下面是这个部分相关类的类关系图: 由以上类图可以发现所有的协议类都从TProtocol类直接或间接继承,每一个协议 类都有一个对应的生产对象工厂(协议工厂).TProtocol是一个抽象的类,不能直接使用的 ,它有一个直接子类默认实现了所有方法(空实现),如果我们需要定义自己的数据传输协 议可以直接从这个类继承

Flink原理与实现:详解Flink中的状态管理

Flink原理与实现系列文章 : Flink 原理与实现:架构和拓扑概览Flink 原理与实现:如何生成 StreamGraphFlink 原理与实现:如何生成 JobGraphFlink原理与实现:如何生成ExecutionGraph及物理执行图Flink原理与实现:Operator Chain原理 上面Flink原理与实现的文章中,有引用word count的例子,但是都没有包含状态管理.也就是说,如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算.从

ASP.NET组件System.Web.Optimization原理及缓存问题详解_实用技巧

1]开篇介绍 这篇文章将简单的分析一下有关静态文件捆绑的ASP.NET组件System.Web.Optimization的运行原理及基本的缓存问题: 在我们的项目里面充斥着很多静态文件,为了追求模块化.插件化很多静态文件都被设计成模块的方式或者被分解,在需要的时候在通过组合的方式在UI层上使用:这就带来一个问题,文件多了会影响浏览器加载页面的速度,而且由于浏览器的并发限制,对于并行的请求不是无限制的,所以捆绑静态文件的功能就产生:其实在以前,IIS还没有集成管道模型的时候我们只能通过动态资源的方

关于jQuery对象数据缓存Cache原理以及jQuery.data详解_jquery

网上有很多教你怎么使用jQuery.data(..)来实现数据缓存,但有两个用户经常使用的data([key],[value])和jQuery.data(element,[key],[value])几乎没有什么文章说清楚它们两的区别,所以我用到了,研究下分享给大家.$("").data([key],[value])与jQuery.data(element,[key],[value])的区别这两个函数都是用来在元素上存放数据也就平时所说的数据缓存,都返回jQuery对象,当时我分别在使用

Android中Messenger原理及基本用法详解

这边博客主要记录一下Android中Messenger的基本原理和用法. 简单来讲,Messenger其实就是Binder通信的包装器,是一种基于消息传递的进程间通信工具. //Messenger实现了Parcelable接口,因此可以跨进程传输 public final class Messenger implements Parcelable { ............... } 通常情况下,我们可以在A进程中创建一个Messenger,然后将该Messenger传递给B进程. 于是,B进