这是我见过的讲解EM算法最详细的文章,没有之一,本博末尾处有出处html
机器学习十大算法之一:EM算法。能评得上十大之一,让人听起来以为挺NB的。什么是NB啊,咱们通常说某我的很NB,是由于他能解决一些别人解决不了的问题。神为何是神,由于神能作不少人作不了的事。那么EM算法能解决什么问题呢?或者说EM算法是由于什么而来到这个世界上,还吸引了那么多世人的目光。
我但愿本身能通俗地把它理解或者说明白,可是,EM这个问题感受真的不太好用通俗的语言去说明白,由于它很简单,又很复杂。简单在于它的思想,简单在于其仅包含了两个步骤就能完成强大的功能,复杂在于它的数学推理涉及到比较繁杂的几率公式等。若是只讲简单的,就丢失了EM算法的精髓,若是只讲数学推理,又过于枯燥和生涩,但另外一方面,想把二者结合起来也不是件容易的事。因此,我也无法期待我能把它讲得怎样。但愿各位不吝指导。算法
扯了太多,得入正题了。假设咱们遇到的是下面这样的问题:
假设咱们须要调查咱们学校的男生和女生的身高分布。你怎么作啊?你说那么多人不可能一个一个去问吧,确定是抽样了。假设你在校园里随便地活捉了100个男生和100个女生。他们共200我的(也就是200个身高的样本数据,为了方便表示,下面,我说“人”的意思就是对应的身高)都在教室里面了。那下一步怎么办啊?你开始喊:“男的左边,女的右边,其余的站中间!”。而后你就先统计抽样获得的100个男生的身高。假设他们的身高是服从高斯分布的。可是这个分布的均值u和方差∂2咱们不知道,这两个参数就是咱们要估计的。记做θ=[u, ∂]T。
用数学的语言来讲就是:在学校那么多男生(身高)中,咱们独立地按照几率密度p(x|θ)抽取100了个(身高),组成样本集X,咱们想经过样本集X来估计出未知参数θ。这里几率密度p(x|θ)咱们知道了是高斯分布N(u,∂)的形式,其中的未知参数是θ=[u, ∂]T。抽到的样本集是X={x1,x2,…,xN},其中xi表示抽到的第i我的的身高,这里N就是100,表示抽到的样本个数。
因为每一个样本都是独立地从p(x|θ)中抽取的,换句话说这100个男生中的任何一个,都是我随便捉的,从个人角度来看这些男生之间是没有关系的。那么,我从学校那么多男生中为何就刚好抽到了这100我的呢?抽到这100我的的几率是多少呢?由于这些男生(的身高)是服从同一个高斯分布p(x|θ)的。那么我抽到男生A(的身高)的几率是p(xA|θ),抽到男生B的几率是p(xB|θ),那由于他们是独立的,因此很明显,我同时抽到男生A和男生B的几率是p(xA|θ)* p(xB|θ),同理,我同时抽到这100个男生的几率就是他们各自几率的乘积了。用数学家的口吻说就是从分布是p(x|θ)的整体样本中抽取到这100个样本的几率,也就是样本集X中各个样本的联合几率,用下式表示:
markdown
2、EM算法
好了,从新回到上面那个身高分布估计的问题。如今,经过抽取获得的那100个男生的身高和已知的其身高服从高斯分布,咱们经过最大化其似然函数,就能够获得了对应高斯分布的参数θ=[u, ∂]T了。那么,对于咱们学校的女生的身高分布也能够用一样的方法获得了。
再回到例子自己,若是没有“男的左边,女的右边,其余的站中间!”这个步骤,或者说我抽到这200我的中,某些男生和某些女生一见倾心,已经好上了,纠缠起来了。我们也不想那么残忍,硬把他们拉扯开。那如今这200我的已经混到一块儿了,这时候,你从这200我的(的身高)里面随便给我指一我的(的身高),我都没法肯定这我的(的身高)是男生(的身高)仍是女生(的身高)。也就是说你不知道抽取的那200我的里面的每个人究竟是从男生的那个身高分布里面抽取的,仍是女生的那个身高分布抽取的。用数学的语言就是,抽取获得的每一个样本都不知道是从哪一个分布抽取的。
这个时候,对于每个样本或者你抽取到的人,就有两个东西须要猜想或者估计的了,一是这我的是男的仍是女的?二是男生和女生对应的身高的高斯分布的参数是多少?
只有当咱们知道了哪些人属于同一个高斯分布的时候,咱们才可以对这个分布的参数做出靠谱的预测,例如刚开始的最大似然所说的,但如今两种高斯分布的人混在一块了,咱们又不知道哪些人属于第一个高斯分布,哪些属于第二个,因此就无法估计这两个分布的参数。反过来,只有当咱们对这两个分布的参数做出了准确的估计的时候,才能知道到底哪些人属于第一个分布,那些人属于第二个分布。
这就成了一个先有鸡仍是先有蛋的问题了。鸡说,没有我,谁把你生出来的啊。蛋不服,说,没有我,你从哪蹦出来啊。(呵呵,这是一个哲学问题。固然了,后来科学家说先有蛋,由于鸡蛋是鸟蛋进化的)。为了解决这个你依赖我,我依赖你的循环依赖问题,总得有一方要先打破僵局,说,无论了,我先随便整一个值出来,看你怎么变,而后我再根据你的变化调整个人变化,而后如此迭代着不断互相推导,最终就会收敛到一个解。这就是EM算法的基本思想了。
不知道你们可否理解其中的思想,我再来啰嗦一下。其实这个思想无处在不啊。
例如,小时候,老妈给一大袋糖果给你,叫你和你姐姐等分,而后你懒得去点糖果的个数,因此你也就不知道每一个人到底该分多少个。我们通常怎么作呢?先把一袋糖果目测的分为两袋,而后把两袋糖果拿在左右手,看哪一个重,若是右手重,那很明显右手这代糖果多了,而后你再在右手这袋糖果中抓一把放到左手这袋,而后再感觉下哪一个重,而后再从重的那袋抓一小把放进轻的那一袋,继续下去,直到你感受两袋糖果差很少相等了为止。呵呵,而后为了体现公平,你还让你姐姐先选了。
EM算法就是这样,假设咱们想估计知道A和B两个参数,在开始状态下两者都是未知的,但若是知道了A的信息就能够获得B的信息,反过来知道了B也就获得了A。能够考虑首先赋予A某种初值,以此获得B的估计值,而后从B的当前值出发,从新估计A的取值,这个过程一直持续到收敛为止。
EM的意思是“Expectation Maximization”,在咱们上面这个问题里面,咱们是先随便猜一下男生(身高)的正态分布的参数:如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(固然了,刚开始确定没那么准),而后计算出每一个人更可能属于第一个仍是第二个正态分布中的(例如,这我的的身高是1米8,那很明显,他最大可能属于男生的那个分布),这个是属于Expectation一步。有了每一个人的归属,或者说咱们已经大概地按上面的方法将这200我的分为男生和女生两部分,咱们就能够根据以前说的最大似然那样,经过这些被大概分为男生的n我的来从新估计第一个分布的参数,女生的那个分布一样方法从新估计。这个是Maximization。而后,当咱们更新了这两个分布的时候,每个属于这两个分布的几率又变了,那么咱们就再须要调整E步……如此往复,直到参数基本再也不发生变化为止。
这里把每一个人(样本)的完整描述看作是三元组yi={xi,zi1,zi2},其中,xi是第i个样本的观测值,也就是对应的这我的的身高,是能够观测到的值。zi1和zi2表示男生和女生这两个高斯分布中哪一个被用来产生值xi,就是说这两个值标记这我的究竟是男生仍是女生(的身高分布产生的)。这两个值咱们是不知道的,是隐含变量。确切的说,zij在xi由第j个高斯分布产生时值为1,不然为0。例如一个样本的观测值为1.8,而后他来自男生的那个高斯分布,那么咱们能够将这个样本表示为{1.8, 1, 0}。若是zi1和zi2的值已知,也就是说每一个人我已经标记为男生或者女生了,那么咱们就能够利用上面说的最大似然算法来估计他们各自高斯分布的参数。可是它们未知,所以咱们只能用EM算法。
我们如今不是由于那个恶心的隐含变量(抽取获得的每一个样本都不知道是从哪一个分布抽取的)使得原本简单的能够求解的问题变复杂了,求解不了吗。那怎么办呢?人类解决问题的思路都是想可否把复杂的问题简单化。好,那么如今把这个复杂的问题逆回来,我假设已经知道这个隐含变量了,哎,那么求解那个分布的参数是否是很容易了,直接按上面说的最大似然估计就行了。那你就问我了,这个隐含变量是未知的,你怎么就来一个假设说已知呢?你这种假设是没有根据的。呵呵,我知道,因此咱们能够先给这个给分布弄一个初始值,而后求这个隐含变量的指望,当成是这个隐含变量的已知值,那么如今就能够用最大似然求解那个分布的参数了吧,那假设这个参数比以前的那个随机的参数要好,它更能表达真实的分布,那么咱们再经过这个参数肯定的分布去求这个隐含变量的指望,而后再最大化,获得另外一个更优的参数,……迭代,就能获得一个皆大欢喜的结果了。并发
这里本博主总结下,EM算法就是使用的条件是:
(1)知道具体的几率模型和数据集
(2)不知道模型具体参数(就像上面男女例子中不知道高斯几率模型的具体均值和方差)
(3)数据集不完整,部分属性的值知道(就像上面的男女例子中,不知道是男是女)
其实看完后面的EM方法就能够看出方法中的E和M就是对应的解决(3)和(2)的机器学习
这时候你就不服了,说你老迭代迭代的,你咋知道新的参数的估计就比原来的好啊?为何这种方法行得通呢?有没有失效的时候呢?何时失效呢?用到这个方法须要注意什么问题呢?呵呵,一会儿抛出那么多问题,搞得我适应不过来了,不过这证实了你有很好的搞研究的潜质啊。呵呵,其实这些问题就是数学家须要解决的问题。在数学上是能够妥当的证实的或者得出结论的。那我们用数学来把上面的问题从新描述下。(在这里能够知道,无论多么复杂或者简单的物理世界的思想,都须要经过数学工具进行建模抽象才得以使用并发挥其强大的做用,并且,这里面蕴含的数学每每能带给你更多想象不到的东西,这就是数学的精妙所在啊)函数
假设咱们有一个样本集{x(1),…,x(m)},包含m个独立的样本。但每一个样本i对应的类别z(i)是未知的(至关于聚类),也即隐含变量。故咱们须要估计几率模型p(x,z)的参数θ,可是因为里面包含隐含变量z,因此很难用最大似然求解,但若是z知道了,那咱们就很容易求解了。
对于参数估计,咱们本质上仍是想得到一个使似然函数最大化的那个参数θ,如今与最大似然不一样的只是似然函数式中多了一个未知的变量z,见下式(1)。也就是说咱们的目标是找到适合的θ和z让L(θ)最大。那咱们也许会想,你就是多了一个未知的变量而已啊,我也能够分别对未知的θ和z分别求偏导,再令其等于0,求解出来不也同样吗?
工具
这个不断的迭代,就能够获得使似然函数L(θ)最大化的参数θ了。那就得回答刚才的第二个问题了,它会收敛吗?
感性的说,由于下界不断提升,因此极大似然估计单调增长,那么最终咱们会到达最大似然估计的最大值。理性分析的话,就会获得下面的东西:
学习
具体如何证实的,看推导过程参考:Andrew Ng《The EM algorithm》
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html优化
坐标上升法(Coordinate ascent):
图中的直线式迭代优化的路径,能够看到每一步都会向最优值前进一步,并且前进路线是平行于坐标轴的,由于每一步只优化一个变量。
这犹如在x-y坐标系中找一个曲线的极值,然而曲线函数不能直接求导,所以什么梯度降低方法就不适用了。但固定一个变量后,另一个能够经过求导获得,所以可使用坐标上升法,一次固定一个变量,对另外的求极值,最后逐步逼近极值。对应到EM上,E步:固定θ,优化Q;M步:固定Q,优化θ;交替将极值推向最大。atom
EM算法有不少的应用,最普遍的就是
具体能够参考JerryLead的cnblog中的Machine Learning专栏:
没有鸡和蛋的前后之争,由于他们都知道“没有你就没有我”。今后他们一块儿过上了幸福美好的生活。
参考: