EM算法原理简析——图解
一、 扯淡
转眼间毕业快一年了,这期间混了两份工作,从游戏开发到算法。感觉自己还是喜欢算法,可能是大学混了几年算法吧!所以不想浪费基础。。。
我是个懒得写博客的人,混了几年coding,写的博客不超过10篇。现在参加工作,必须得改掉懒的坏习惯,以后多尝试写写,好总结总结,也方便以后复习用。
二、算法
1. 前言
1.1 EM会涉及一些数学知识,比如最大似然估计和Jensen不等式等知识,这些知识最烦了,动不动就一堆推导公式,看着就觉得蛋疼,经过它讲的原理比较简单,多以在此略过。
1.2 本文的侧重点是理解EM,试图以“数形结合”的方式来帮助大家理解其原理。(因为博主看了很多相关的文章,大多是一堆数学公式,看了半天也不好理解,虽然感觉是这个样子)。
2. 算法描述
给定样本T = {X1, X2, …, Xm},现在想给每个Xi一个Zi,即标出: {(X1,Z1), (X2,Z2),…,(Xm,Zm)}(z是隐形变量,zi=j可以看成是Xi被划分为j类),求对T的最大似然估计:

其实Zi也是个向量,因为对于每一个Xi,都有多种分类的情况。设第i个样本Xi在Z上的概率分布为Qi(Zi),即Qi(Zi=j)表示Xi被划分到类j的概率,因此有ΣQi(Zi) = 1。

(2)到(3)是利用Jensen不等式,因为log(x)为凹函数,且
这个就是p(xi, zi; θ)/Qi(zi)的期望。
现在,根据Jensen不等式取等号的条件:

因为这个式子对于Zi等于任何值时都成立,且有ΣQi(Zi) = 1,所以可以认为:Σp(xi, zi;θ) = c。此时可以推出:

式子中,Zi是自变量,若θ已知,则可计算出Qi(zi)。
至此,终于可以描述算法过程了:
1)给θ一个初始值;
2)固定当前的θ,让不等式(3)取等号,算出Qi(zi);-------> E 步
3)将2)算出的Qi(zi)代入g(Q, θ) =
,并极大化g(Q,θ),得到新的θ。-------------->M步
4)循环迭代2)、3)至收敛。
3. 证明算法的收敛
1)首先我们知道上节所提到的g(Q,θ)为最大似然函数L(θ)的下界函数,也就是说,无论Q、θ怎么变,g永远在L下面;
2)函数L(θ)是关于θ的函数,z是从θ抽离的隐含变量,其实它也是关于θ的函数;
3)g(Q,θ)是关于Q、θ的函数,但我们可以看做是θ的函数,而Q只是控制函数图像的,例如:f(x) = a*x^2 +1 ,虽然a、x都是可变的,但是为了画图,我们把f(x)看做x的函数。
有了以上前提,我们就能画出它们的关系:

如上图,描述了EM的迭代过程:(z代替了公式中的Q)
1)起始状态θ0, z0,则函数g(z,θ)看成是g_z0(θ);
2)θ=θ0不变,让不等式3)取等号,即z由z0变为z1,此时让g_z1(θ) 相切于点P1,因为此时不等式取等号:L(θ0)=g_z1(θ0);--------------->E步
3)p1不一定是g_z1的极值点,因此求得极值点M1(常规方法:求导=0);---------------->M步
4)依据2)中的方法,再次调整z,得到函数g_z2(θ),是其于L(θ)相切于p2;------------------>E步
5)p2不一定是函数g_z2(θ)的极值点(因为函数g的图像改变了,g_z1->g_z2),因此再对g_z2(θ)求极值点M2;-------------------->M步
……
n)迭代至g_zn(θn-1)与L(θ)区部极值点非常接近为止。
由以上得,EM算法可以逼近L(θ)的极值点,但可能是局部极值点,因此要改变初始值,执行多次。
EM的数学证明也很简单,可以参照以下博客:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
其中包含了jensen不等式的证明。
PS:个人思路,不对的地方还请指出,我会及时改进,谢谢!
EM算法原理简析——图解的更多相关文章
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- PHP的错误报错级别设置原理简析
原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
- [转载] Thrift原理简析(JAVA)
转载自http://shift-alt-ctrl.iteye.com/blog/1987416 Apache Thrift是一个跨语言的服务框架,本质上为RPC,同时具有序列化.发序列化机制:当我们开 ...
- 2. EM算法-原理详解
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...
- Spring系列.@EnableRedisHttpSession原理简析
在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...
- SIFT特征原理简析(HELU版)
SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以< ...
- EM算法原理总结
EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
写着前面 IdentityServer4的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章,比如: ...
随机推荐
- struts2 标签库 介绍
struts2.0里的标签没有分类,只用在jsp头文件加上<%@ taglib prefix="s" uri="/struts-tags" %>就能 ...
- JVM内存状况查看方法和分析工具
Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及JVM内存的状况,同时开源界和商业界也有一些工具可用于查看.分析GC及JVM内存的状况.通过这些分析,可以排查程序中内存泄露的问题及 ...
- MSSQLServer基础04(常用函数)
类型转换函数 CAST ( expression AS data_type) CONVERT ( data_type, expression,[style]) 对日期的转换.转换成各种国家格式的日期. ...
- c#基础精华01(强调代码规范,虚方法,抽象方法,接口)
强调代码规范 规则(法律,必须遵守否则报错) 语法 规范(道德,大家都喜欢有道德的人.) 注释//,/**/,/// 骆驼命名 :第一个单词首字母小写,之后的单词首字母大写 userName.user ...
- /storage/sdcard, /sdcard, /mnt/sdcard 三者的区别
原文地址: /storage/sdcard, /sdcard, /mnt/sdcard 三者的区别 - petercao - 博客园 http://www.cnblogs.com/bluestorm/ ...
- Oracle 列顺序测试
列顺序测试 大家在做表设计的时候通常对表中列的排列顺序没有过多注意,但是其实越常用的列,它的位置越靠前,则查询速度越快. 因为每个block里面存储了row directory (每行数据在块中的位移 ...
- node.js 异步式I/O 与事件驱动
Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一 ...
- C#解析.msg文件(outlook文件)
起因 有一批邮件(700+),全是 .msg 文件,是同群发邮件产生的退信,这些退信需要作分析,得出退信产生的原因. 解决方法 在网上搜了一下发现 .msg文件有其自己的格式,MS提供了格式说明,自己 ...
- 无效的 URI: 未能分析证书颁发机构/主机
出 现该错误的原因是URL中少了一个斜杠,正常的URL是“http:”后边有两个斜杠,而我在修改配置文件中的URL的IP地址部分时,不小心删掉了一个 斜杠,例如:http:/blog.csdn.net ...
- 深入理解memcached
网上有5篇介绍memcached的文章,写的挺好,这里转过来. memcached完全剖析–1. memcached的基础 memcached全面剖析–2.理解memcached的内存存储 memca ...