一、概述

概率模型有时既含有观测变量,又含有隐变量,如果概率模型的变量都是观测变量,那么给定数据,可以直接利用极大似然估计法或者贝叶斯估计法估计模型参数。但是,当模型同时又含有隐变量时,就不能简单地使用这些方法。EM算法适用于带有隐变量的概率模型的参数估计,利用极大似然估计法逐步迭代求解。

二、jensen不等式

  是区间 上的凸函数,则对任意的 ,有不等式:
 
即:
  E[f(X)] ≥ f(E(X))  ,因为(x1+x2+...+xn)/n=E(X),同理可得E(f(X))。当x1=x2=...=xn的时候等式成立。
 
如果是凹函数,怎正好反过来。
 
假设f(x)=log(x),则根据jensen不等式可得:
因为log函数是一个凹函数,所以正好反过来,Σλjyj就是变量Y的期望。后面会用到该log对应的jensen不等式,当yi是一个固定常数的时候等式成立。
 
三、高斯混合模型求解
 
1)问题描述
  还是以经典的身高为例子,假设有100个身高的数据集,这100个人由广东人和东北人组成,但是具体却不知道每个人来自哪里。假设广东人和东北人的身高分别符合某一参数的高斯分布,如何利用这100个人去评估求解广东人和东北人的分布参数呢?如果我们知道哪个人来自哪里,利用极大似然估计直接求解即可得到各自的分布参数;但是这里面不知道哪个人具体来自哪里,所以隐含了一个地域分布的变量,含有隐变量的情况下就不能直接利用MLE求解了,这个时候EM就可以发挥作用了。这两个人群混合在一起其实就是高斯混合模型,如下:
 
 其中,αk是系数,αk≥0,Σαk=1;ø(x;θk)是高斯分布密度函数,θk=(μkk)。这里我们要求解的参数就是αkθk,P(x;θ)这个两个高斯分布的混合高斯模型。
 
2)公式推导
 我们把隐变量考虑进去,用z表示隐变量地域的分布,例如z=0表示来自广东,z=1表示来自东北,写出对应的似然函数如下:
 之所以后面按z累加概率,是因为在不知道一个样本来自哪里的情况下,就把可能出现的概率累加起来就是表示该样本出现的概率。
上面这个式子log后面是一个累加项,求导会非常麻烦,做一个转化,这里面要用到上面提到的jensen不等式,求一个近似的函数逼近原函数逐步求解:
 
 这里面的Q(z)就是关于z的分布函数,Q(z)≥0,∑Q(z)=1,根据上面的jensen不等式可得上述不等式。
 我们找到了似然函数的一个下界,如何去优化呢?我们首先必须保证这个下界是紧的,也就是至少要满足等号成立的条件。由Jensen不等式,等式成立的条件是随机变量是固定常数,也就是:
 
而满足该式子等于常数C的时候,我们的Q(z)到底是什么形式呢?如何求得Q(z)呢?往下看:
因为:
 
 
所以:
进而:
这个时候Q(z)我们就找到了,Q(z)就是在知道参数θ情况下,样本xi属于z地域的概率值。
 
3)图形化展示优化思路
当我们初始化参数θ1的时候,带入公式会得到Q(z)的分布,这个时候的的Q(z)是满足等号成立的条件的,因为我们推导求Q(z)公式的时候就是按等号成立的条件去推导的。所以这个时候的下界函数和原似然函数L(θ)在θ1处值是相等的,下界函数的曲线就是图示中θ1与θ2所在的第一个黑色曲线。下一步我们优化下界函数,求得其极大值,就会得到如图所示的θ2的参数值。此时我们将θ2再次带入公式,得到一个新的Q(z)分布,Q(z)变了,当然下界函数曲线也变了,新的下界函数就是图示θ2和θ3所在的第二条黑色曲线,因为θ2带入Q(z)之后,这个时候跟θ1带入一样,是满足等式成立的条件的,所以新的黑色曲线就在θ2处上方与L(θ)值相等,接着求当前下界函数的极大值,得出θ3参数。如此下去,就能无限接近原似然函数的极值点。
 
4)算法具体步骤

首先,初始化参数θ

  (1)E-Step:根据已知参数θ计算每个样本属于z的概率,即这个身高来自广东或东北的概率,这个概率就是Q(z),这一步为什么叫求期望呢?我的理解是这样的,下界函数是 ∑∑Q(z)*log(p(x,z;θ)/Q(z)),Q(z)本身就是一个概率分布,所以这正是求期望的公式。

  (2)M-Step:根据计算得到的Q(z),求出含有θ的似然函数的下界并最大化它,得到新的参数θ。这里面下界函数中,Q(z)带入初始化或者前一步已知的θ参数值,而p(xi,z;θ)中Θ参数还是未知,相当于成了以θ为变量的函数,这一步极大化求函数的极值点对应的θ点即可。

  重复(1)和(2)直到收敛,可以看到,从思想上来说,和最开始没什么两样,只不过直接最大化似然函数不好做,曲线救国而已。

  至于为什么这样的迭代会保证似然函数单调不减,即EM算法的收敛性证明,《统计学习方法》里面有证明。EM算法在一般情况是收敛的,但是不保证收敛到全局最优,即有可能进入局部的最优。

 
 
 
 
参考链接:https://www.cnblogs.com/bigmoyan/p/4550375.html
                  https://www.cnblogs.com/Gabby/p/5344658.html

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

  1. EM算法理解的九层境界

    EM算法理解的九层境界 EM 就是 E + M EM 是一种局部下限构造 K-Means是一种Hard EM算法 从EM 到 广义EM 广义EM的一个特例是VBEM 广义EM的另一个特例是WS算法 广 ...

  2. 超详细的EM算法理解

    众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的数据,又知道身高的概率模型是高斯分布,那么利用极大化似然函数的方法可以估计出高斯分布的两个参数,均值和方差.这个方法 ...

  3. Machine Learning系列--EM算法理解与推导

    EM算法,全称Expectation Maximization Algorithm,译作最大期望化算法或期望最大算法,是机器学习十大算法之一,吴军博士在<数学之美>书中称其为“上帝视角”算 ...

  4. EM算法浅析(一)-问题引出

    EM算法浅析,我准备写一个系列的文章: EM算法浅析(一)-问题引出 EM算法浅析(二)-算法初探 一.基本认识 EM(Expectation Maximization Algorithm)算法即期望 ...

  5. EM算法-完整推导

    前篇已经对EM过程,举了扔硬币和高斯分布等案例来直观认识了, 目标是参数估计, 分为 E-step 和 M-step, 不断循环, 直到收敛则求出了近似的估计参数, 不多说了, 本篇不说栗子, 直接来 ...

  6. 如何感性地理解EM算法?

    https://www.jianshu.com/p/1121509ac1dc 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计.个人认为,理解EM算法背后的idea,远比看懂 ...

  7. 浅谈EM算法的两个理解角度

    http://blog.csdn.net/xmu_jupiter/article/details/50936177 最近在写毕业论文,由于EM算法在我的研究方向中经常用到,所以把相关的资料又拿出来看了 ...

  8. EM算法之不同的推导方法和自己的理解

    EM算法之不同的推导方法和自己的理解 一.前言 EM算法主要针对概率生成模型解决具有隐变量的混合模型的参数估计问题. 对于简单的模型,根据极大似然估计的方法可以直接得到解析解:可以在具有隐变量的复杂模 ...

  9. 对EM算法的理解

    EM算法中要寻找的参数θ,与K-means聚类中的质心是对应的,在高斯混合模型中确定了θ,便可为样本进行类别的划分,属于哪个高斯分布的概率大就是哪一类,而这一点与K-means中的质心一样,质心确定了 ...

随机推荐

  1. underscore.js源码解析(一)

    一直想针对一个框架的源码好好的学习一下编程思想和技巧,提高一下自己的水平,但是看过一些框架的源码,都感觉看的莫名其妙,看不太懂,最后找到这个underscore.js由于这个比较简短,一千多行,而且读 ...

  2. 《LINUX内核设计与实现》第五章学习总结

    一.与内核通信 系统调用:用户控件进程和硬件设备之间添加了一个中间层 系统调用的三个主要作用: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户 ...

  3. 实体框架自定义代码优先约定(EF6以后)

    仅限EF6仅向前 - 此页面中讨论的功能,API等在实体框架6中引入.如果您使用的是早期版本,则部分或全部信息不适用. 使用Code First时,您的模型是使用一组约定从您的类计算的.默认的Code ...

  4. 【设计模式】—— 享元模式Flyweight

    前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是 ...

  5. Struts2 分割字符串标签s:generator

    有些时候会从后台返回一个字符串,可以通过Strut2的标签s:generator进行分割. generator标签,该标签可以将指定字符串按指定分隔符分割成多个字串.生成的多个字串可以用iterato ...

  6. RabbitMQ 客户端开发向导

    准备工作:composer 引入 php-amqplib 说明:本文说明基于 Java(主要说明原理),实现使用 php RabbitMQ Java 客户端使用 com.rabbitmq.client ...

  7. Linux掉电处理

    在嵌入式设备中,掉电处理一直是一项比较麻烦的工作,在具有Linux系统的设备中,系统的种种数据的处理更是增加掉电处理的难度.现在做以下几点总结,再遇到类似问题可以做个参考. 1,系统启动的处理 在系统 ...

  8. duilib踩坑记录

    duilib官方 https://github.com/duilib/duilib duilib他人扩展 https://github.com/qdtroy/DuiLib_Ultimate 关于两者的 ...

  9. T分布在医药领域应用-python建模

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  10. Golang的文件处理方式-常见的读写姿势

    Golang的文件处理方式-常见的读写姿势 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在 Golang 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄 ...