EM算法理解

来源:互联网 发布:excel多列数据找相同 编辑:程序博客网 时间:2024/06/05 19:44

看了很多文章,对这个概念总是理解的模模糊糊,今天把它摘抄并写出来,加深一下理解。EM算法,全称是Expectation maximization,期望最大化。摘抄了两位知乎大牛的解释——
先来看看为什么需要EM算法以下是某知乎大牛的解释:
1 为什么需要EM算法?
我们遇到的大多数问题是这样的:
A、已知一堆观测数据X
B、和数据服从的统计模型然后利用数据来估计统计模型中的参数解决这个问题的思路是:最大似然,即模型的参数应该能使我们观测到的这组数据的可能性最大。而这个似然函数就是:P(X|Θ)
于是,参数估计的问题变成了最优化问题。而最优化问题求解中,最常用的就是直接求导获得解析解,或者用梯度下降的方法去迭代。
不过,事情并非总这么简单。我们可能会遇到:
A、观测值有缺失
B、难以得知P(X|Θ),当引入一个隐含变量时,才能写出模型
当然,其实这两种情况都是一种情况,就是必须引入一个隐含变量。这种情况下,对P(X|Θ)进行优化是困难的,通过引入隐含变量Z,把问题转换为优化P(X|Θ) = ∑P(X,Z|Θ)是相对容易的。然而在优化这个问题的时候,通常很难求导;或者导数是一个互相耦合的方程,这个时候,EM算法就登场了。不过EM算法和梯度下降法其实本质上都是不动点迭代法。
2、EM算法是什么?为什么可以work?EM算法的思路是巧妙的构造了一个P(X|Θ)的下界,通过优化这个相对简单的下界来优化最终目标P(X|Θ)
同样来自某知乎大牛的对EM算法解释也很到位:EM算法是解决含有隐变量的最大似然估计的算法,因为似然函数一般是取对数的,而作为有隐变量的最大似然函数,它的形式是和的对数,对这样一个函数求导无疑是非常麻烦的,所以EM算法非常巧妙的采用了不断求下界函数最大值的方法来逼近实际的极大值。


下面具体看看这个推导过程
给你一堆观测样本,让你给出这个模型的参数估计。通常的做法是用极大似然估计去做:求期望,求对数期望,求导为0,得到参数估计值,也就是MLE的常规流程!但问题在于,如果这个问题存在中间的隐变量呢?
一)先来看看不存在中间隐含变量,假设有一天人类消除了性别的差别,所有的人都是同一个性别。这个时候,我给了你一群人的身高让你给我做一个估计人身高的模型。怎么办呢?感觉上身高应该是服从高斯分布吧,所以假设人的身高分布服从高斯分布N(μ,σ2),现在我又有了N个人的身高的数据,我就可以照着上面的套路进行了。先求对数似然函数
这里写图片描述
接着对两个参数求偏导为0
这里写图片描述
这样就得到了我们的参数估计
这里写图片描述
可以看出参数刚好大致符合高斯分布的均值和方差的计算
二)若EM存在中间隐含变量
正如你所知,身高和性别的关系挺大的,所以,给你一堆人的身高数据(不分男女),要做一个估计人身高的模型,那我们应该怎么做呢?
首先,现在分为不同性别两类了,这些类别的概率肯定有个分布,其次,各个类别当中身高是服从不同的分布的,那么这样身高的估计就变成了
这里写图片描述
αk代表了该样本属于某一性别的比例,其实就是隐藏的中间变量。μk,σ2k为各类高斯分布的参数。按照我们上面的套路就是求对数似然概率再求导得到参数的估计,那么先来看看似然函数
这里写图片描述
经过转换之后发现,对数里面带加号,这下求导就变得复杂异常了,而且没法求解,事实上,这种式子确实没有解析解。所以这就体现出了似然函数有中间隐含变量与没有中间隐含变量的不同,我们采用不同的方法,假设我们随便猜一个α的分布为Q,或者说α服从某个分布,那么对数似然函数可以写成
这里写图片描述
由于Q是α的一个分布,所以似然函数可以看成是一个log(E(x)),log是个凹函数(凹凸函数本质是描述函数斜率增减的。
语义上凸为正,代表斜率在增加(单调不减)。凹为负,代表斜率在减少。),割线始终在函数图像下方,Jensen不等式反向应用一下,有log(E(x))>=E(log(x)),所以上面的对数似然有
这里写图片描述

至此,目前得到了一个对数似然函数的下界函数,我们求解它的局部最大值,那么更新后的参数带入这个下界函数一定比之前的参数值大,而它本身又是对数似然函数的下界函数,所以参数更新后,我们的对数似然函数一定是变大了!所以,就利用这种方法进行迭代,最后就能得到比较好的参数估计。
这里写图片描述
红色那条线就是我们的对数似然函数,蓝色那条是我们在当前参数下找到的对数似然的下界函数,可以看到,我们找到它的局部极值那么参数更新成thetanew,此时对数似然函数的值也得到了上升,这样重复进行下去,是不是就可以收敛到对数似然函数的一个局部极值了嘛。对的,局部极值,并不能保证是全局最优,但它就是个估计嘛,你还要她怎样?!
到了这里,我们好像跳着先把第二步参数更新的工作做完了,那么还有一个事情是我们要注意的,Q呢,Q是啥,没Q你算啥极值,更新啥参数。我们已经知道Q是alpha的一个分布,然后我们肯定是希望这个下界函数尽量贴近原来的对数似然函数,这样我们才能更快地更新参数,那下界函数啥时最大呢,等号成立呗,等号成立说明你求期望的对象是个常数呀,所以log和Q谁在前后都无所谓,那么就有了
这里写图片描述
直观地可以理解成第i个样本来自第k个类别的可能性。好了,现在Q也确定了,我们根据上面所说的方法更新参数,再更新Q,再更新参数,迭代进行下去就可以了。
1 拿到所有的观测样本,根据先验或者喜好先给一个参数估计。
2 根据这个参数估计和样本计算类别分布Q,得到最贴近对数似然函数的下界函数。
3 对下界函数求极值,更新参数分布。
4 迭代计算,直至收敛。
下面是来自七月算法公开课的几张关键图:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

摘抄参考文章:http://blog.csdn.net/sinat_22594309/article/details/65629407

原创粉丝点击