一、 扯淡

转眼间毕业快一年了,这期间混了两份工作,从游戏开发到算法。感觉自己还是喜欢算法,可能是大学混了几年算法吧!所以不想浪费基础。。。

我是个懒得写博客的人,混了几年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算法原理简析——图解的更多相关文章

  1. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  2. PHP的错误报错级别设置原理简析

    原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...

  3. Java Annotation 及几个常用开源项目注解原理简析

    PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...

  4. [转载] Thrift原理简析(JAVA)

    转载自http://shift-alt-ctrl.iteye.com/blog/1987416 Apache Thrift是一个跨语言的服务框架,本质上为RPC,同时具有序列化.发序列化机制:当我们开 ...

  5. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

  6. Spring系列.@EnableRedisHttpSession原理简析

    在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...

  7. SIFT特征原理简析(HELU版)

    SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以< ...

  8. EM算法原理总结

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  9. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析

    写着前面 IdentityServer4的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章,比如: ...

随机推荐

  1. struts2 标签库 介绍

    struts2.0里的标签没有分类,只用在jsp头文件加上<%@ taglib prefix="s" uri="/struts-tags" %>就能 ...

  2. JVM内存状况查看方法和分析工具

    Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及JVM内存的状况,同时开源界和商业界也有一些工具可用于查看.分析GC及JVM内存的状况.通过这些分析,可以排查程序中内存泄露的问题及 ...

  3. MSSQLServer基础04(常用函数)

    类型转换函数 CAST ( expression AS data_type) CONVERT ( data_type, expression,[style]) 对日期的转换.转换成各种国家格式的日期. ...

  4. c#基础精华01(强调代码规范,虚方法,抽象方法,接口)

    强调代码规范 规则(法律,必须遵守否则报错) 语法 规范(道德,大家都喜欢有道德的人.) 注释//,/**/,/// 骆驼命名 :第一个单词首字母小写,之后的单词首字母大写 userName.user ...

  5. /storage/sdcard, /sdcard, /mnt/sdcard 三者的区别

    原文地址: /storage/sdcard, /sdcard, /mnt/sdcard 三者的区别 - petercao - 博客园 http://www.cnblogs.com/bluestorm/ ...

  6. Oracle 列顺序测试

    列顺序测试 大家在做表设计的时候通常对表中列的排列顺序没有过多注意,但是其实越常用的列,它的位置越靠前,则查询速度越快. 因为每个block里面存储了row directory (每行数据在块中的位移 ...

  7. node.js 异步式I/O 与事件驱动

    Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一 ...

  8. C#解析.msg文件(outlook文件)

    起因 有一批邮件(700+),全是 .msg 文件,是同群发邮件产生的退信,这些退信需要作分析,得出退信产生的原因. 解决方法 在网上搜了一下发现 .msg文件有其自己的格式,MS提供了格式说明,自己 ...

  9. 无效的 URI: 未能分析证书颁发机构/主机

    出 现该错误的原因是URL中少了一个斜杠,正常的URL是“http:”后边有两个斜杠,而我在修改配置文件中的URL的IP地址部分时,不小心删掉了一个 斜杠,例如:http:/blog.csdn.net ...

  10. 深入理解memcached

    网上有5篇介绍memcached的文章,写的挺好,这里转过来. memcached完全剖析–1. memcached的基础 memcached全面剖析–2.理解memcached的内存存储 memca ...