EM算法详解

1 极大似然估计

假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么?

图1 学生成绩的分布

欲求在抽样X时,最优的μ和σ2参数估计,虽然模型的原型已知,但不同的参数对应着不同的学生成绩分布,其中一种最简单有效的参数估计方法就是估计的参数在目前抽样的数据上表现最好,即使得f(X|μ,σ2)的联合概率最大,这就是极大似然估计,常用L(μ,σ2|X)表示,满足公式(1)所示的关系。在实际计算中,对数函数是一个严格递增的函数,对似然函数取代数后,计算要简单很多,而且直接的似然函数计算中涉及大量浮点概率的乘法,容易导致计算机浮点计算精不够而出现机器0值,从而常用公式(2)的l(μ,σ2|X)来求极大似然估计,更普遍的如公式(3)所示。     余下的问题,就是求l(μ,σ2|X)的极大值的过程,即参数的一阶偏导为0的极值点,在此不详述了,可参看下图。

非常庆幸,对于正态分布来说,μ和σ2都能解析地直接求解,从而得到学生成绩满足何种正态分布。但实际情况是,许多应用模型中求解μ和σ2都十分困难。

2 隐含状态的极大似然估计

如第1节中所述,学生的单科成绩满足高斯分布f(x|μ,σ2),假设抽取的X是学生的语文和数学成绩,显然这样的成绩应该符合分布g(x|λ12121222),如公式(3)所示,两个混合的高斯分布,λ12分别表示f(x|μ112)和f(x|μ222)的在模型中的比率。

    对于公式(5)所示的极大似然估计求解中,偏导的方程组,由于和的对数的数据,方程组的求解已经是神鬼难助了。

如果知道Xm={x1,x2,…,xm}属于语文成绩,Xelse={x1+m,x2+m,…,xn}属于数学成绩,g(x|θ)将变得极其简单,完全可以由第1节方法求解;如果知道μ121222,求Xm和Xelse也很容易——鸡蛋困境?

接下来详述的EM(Expectation Maximization, EM)算法解决的就是这个鸡蛋困境,不管是先有鸡还是先有蛋,最终命运都会被享用。

3 EM算法

在此先将问题抽象,已知模型为p(x|θ),X=(x1,x2,…,xn),求θ。引入隐含变量Z=(z1,z2,…,zn),使得模型满足公式(6)或公式(7)的关系。由第1节的极大似然估计有,l(θ)满足公式(8)。

    和很多求极值的算法一样(NN的BP算法),EM算法也是通过迭代计算l(θ) 的极值的。假设第n轮迭代计算出的

θ为θn,在新的迭代中,最简单的想法就是新的θ要优于θn即可,有l(θ)-l(θn)如下所示。如公式(9)描述,计算的的难度主要在于log函数中的求和,为解决这个问题和找到l(θ)-l(θn)的下界值,引入Jensen不等式。

函数的凹凸性与Jensen不等式:

如果f(x)为凸函数,f(x)满足公式(10)的关系,具体证明不述,紧述的函数图就明了地描绘了这种关系。更一般地说,f(x)满足公式(11)中的关系,证明可由公式(10)导出,称为Jensen不等式。

      至于什么是凸函数,f(x)的二阶偏导恒大于(或等于)0,如果x为高维向量,hessian矩阵必须(半)正定,凹函数属性相对。

而f(x)=log(x), f’’=-1/x2<0 就为一个典型的凹函数,满足关系(11)。

公式(9)中的l(θ)-l(θn)满足如下关系:

     进而有:

图2 l(θ)和φ(θn,θ)关系图

可见l(θ)的下界为φ(θn,θ),φ(θn,θ)值越大, l(θ)的下界也将越大(其中的θn为已知变量),具体l(θ)和φ(θn,θ)的关系可从图2可看出:φ(θn,θ)增长的方向也是l(θ)增长的方向,也就是任意增长φ(θn,θ)值的θ,都将使l(θ)下界增大,从而迭代使l(θ)逼近理想值。当然,在此最好的φ(θn,θ)值的θ便是,max(φ(θn,θ))处的θ,计算如下:

      这样,迭代求θ的方法就显而易见了:

随机初始化θ0

1、求条件期望F(θ,θn),如上公共所示;

2、求F(θ,θn)的极值处θn+1

3、反复迭代1,2计算,直到θn收敛,即|θn+1n|<α(收敛条件)。

这样,EM算法就完全解决了鸡和蛋的问题了,至于初始化条件可以是鸡(θ0),也可以是蛋(z0)。

PS:EM算法的敛散性,由计算中的下界迭代,可很清晰的看到,EM算法收敛,但可能收敛于局部最优解,证明不述。

4 缺失数据问题

可以说EM算法天生就是用来解决缺失数据的问题的,将第3节的隐变量z看成是数据中缺失的数据即可。

在完全数据X(无缺失数据)下,知模型为f(x|θ),求数据满足何种模型?这可以由第1节的极大似然估计求解;如果采样数据存在部分未知Z,预测这些含未知的数据的数据符何什么模型?这就可借用第3节的EM算法了,先随机假设θ0,迭代求解,最后求知f(x|θ),当然也就可出了z。

5 高斯混合模型

暂不述,直接为EM算法的应用。

参考资料:

1、Sean Borman. The Expectation Maximization Algorithm;

2、李航. 统计学习方法;

3、虞台文. EM Algorithm.

对于同仁们的布道授业,一并感谢。

----

只能永远把艰辛的劳动看作是生命的必要;即使没有收获的指望,也能心平气和的继续耕种。
 

EM算法详解的更多相关文章

  1. Weka中EM算法详解

    private void EM_Init (Instances inst) throws Exception { int i, j, k; // 由于EM算法对初始值较敏感,故选择run k mean ...

  2. 从最大似然函数 到 EM算法详解

    极大似然算法 本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了.... MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思 ...

  3. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  4. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  5. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  6. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

  7. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  8. KMP算法详解(转自中学生OI写的。。ORZ!)

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

  9. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

随机推荐

  1. C#中对值类型和引用类型的一点认识

    区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值.而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址. 就像一个是复制了银行卡里的现 ...

  2. jQuery.extend()源码解读

    // extend方法为jQuery对象和init对象的prototype扩展方法// 同时具有独立的扩展普通对象的功能jQuery.extend = jQuery.fn.extend = funct ...

  3. 表单元素的外观改变(webkit and IE10)

    1.禁止表单默认外观: input,select{ -webkit-appearance:none; appearance:none; }2.伪元素改变ie10表单元素默认外观 select::-ms ...

  4. js对象字面量

    在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外.以 ...

  5. 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 第一节 - 关键类作用及关系

    MonkeyRunner框架暴露了几个类的大量的API出去给用户编写脚本时候使用,其中最主要的三个就是: MonkeyDevice目标设备操作类,HierarchyViewer窗口界面对象操作类以及M ...

  6. Android NDK进入发展

    使用互联网有很多javah命令生成一个头文件来完成JNI写,但事实上ADT集成NDK后.点点鼠标就可以了,网上的介绍是非常小懒的方法,在这里,我们主要谈论的懒惰JNI发展. 为ADT组态NDK.请个人 ...

  7. Oracle SqlPlus 方向键的方法和解决的退格键失效

    SqlPlus中退格键和方向键的设置 在刚装好的Oracle中,我们使用SqlPlus会发现很的蹩脚,不仅退格键不好用,方向键也不行调出history.以下有几种解决方法. 1.能够使用ctrl+Ba ...

  8. 图文解说PhpStorm 7.0版本语法着色

    前不久,我们测试了PhpStorm7.0版本对PHP 5.5的支持,今天我们将继续对PhpStorm 7.0版本对代码支持进行测试. 我们知道,在PhpStorm 6.0版本中,提供一个黑色背景的代码 ...

  9. C#编程实践--字符串反转

    朴素反转 朴素解法,倒序遍历,字符串拼接,字符串性能低下,在长度已知的前提可以使用char数组代替 public static string NaiveReverse(string text) { s ...

  10. Bootstrap导航悬浮顶部,stickUp

    stickUp 一个 jQuery 插件 这是一个简单的jQuery插件,它能让页面目标元素 “固定” 在浏览器窗口的顶部,即便页面在滚动,目标元素仍然能出现在设定的位置.此插件可以在多页面的网站上工 ...