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的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章,比如: ...
随机推荐
- Unity3D的几种坐标系
原地址:http://www.cnblogs.com/martianzone/p/3371789.html http://www.cnblogs.com/88999660/archive/2013/0 ...
- linux useradd添加用户
useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. useradd -m -s /bin/bash -g 群组名 用户名 其中 -m:自动建立用户的登入目录. -s:指定用户 ...
- HDMI介绍与流程
HDMI接口 http://baike.c114.net/view.asp?id=17671-21565442 DDC(Display Data Channel)通道用于HDMI发送和接收端之间交换一 ...
- H264码流解析及NALU
ffmpeg 从mp4上提取H264的nalu http://blog.csdn.net/gavinr/article/details/7183499 639 /* bitstream fil ...
- HeadFirst设计模式之组合模式
一. 1.The Composite Pattern allows us to build structures of objects in the form of trees that contai ...
- Android应用启动画面
原文地址: [Android]应用启动画面 - 空客的日志 - 网易博客 http://blog.163.com/da7_1@126/blog/static/104072678201291921028 ...
- POJ2506——Tiling
Tiling Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a samp ...
- C#+SQL数据库备份和还原
使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLDMO实现对Microsoft ...
- cdev[典]
linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每个 cdev 都是一个 kobje ...
- IMX515开发备忘
1.多个PAD可以选择为同样的功能引脚 IMX515处理器一个PAD可以作为多种功能引脚,比如EIM_D25可以作为UART3_RXD,定义如下: 图1 而处理还有一个另一个UART3_RXD的PAD ...