http://blog.csdn.net/xmu_jupiter/article/details/50936177

最近在写毕业论文,由于EM算法在我的研究方向中经常用到,所以把相关的资料又拿出来看了一下,有了一些新的理解与感悟。在此总结一下。

EM算法即“期望极大算法”。学过机器学习的朋友都知道EM算法分两步:E步求期望,M步求极大。但是期望是求谁的期望,极大是求谁的极大呢?这里面其实有两种解读角度。

“通俗”角度

通俗角度的话,求极大肯定是求似然函数的极大了,而且一般都是对数似然。我们一般解决模型参数求解问题,都是在给定数据的情况下,求解使得似然函数最大的参数的取值。用公式表示就是:

θ^=arg maxθ log P(X|θ)

通常的做法是对似然函数求偏导,然后令偏导等于零,参数取得的数值就是近似最优值。但是,有些含有隐变量的模型没办法直接进行似然函数的偏导,但是如果假设已经知道隐变量的值,就可以将似然函数简化进行下一步的求偏导。

因此,我们需要引入一个隐变量,求这个隐变量的期望就成了这种理解角度下E步骤。然后将隐变量的期望代入到经过隐变量改写的对数似然函数中,就可以按照通常的极大似然估计求解参数了。不过需要不断迭代才能达到近似最优。

总结起来,这种角度的EM算法框架如下:

loop

  • E-step:求在观测数据的前提下隐变量的期望;
  • M-step:求经过隐变量改写的似然函数的极大;

end

这种角度的好处是由一般的极大似然估计自然地引入到EM方法,比较容易理解;但是缺点是一般很难写出引入隐变量的似然函数的改写。实际上,这种改写很多情况下是依据EM算法的另一个理解角度而直接写出来的。

“正式”角度

看过EM算法推导过程的朋友应该都知道,有一个概念叫做“Q函数”;还有EM算法是通过不断求解下界的极大化逼近求解对数似然函数的极大化。那么,这个Q函数是怎么来的呢?EM算法是怎么不断求解下界的极大化呢?

EM算法通过迭代逐步近似极大化L(θ)。假设在第i次迭代后θ的估计值是θ(i)。我们希望新估计值θ能使L(θ)增加,即L(θ)>L(θ(i)),并逐步达到极大值。为此,考虑两者的差:

L(θ)−L(θ(i))

然后,利用Jensen不等式得到其下界:B(θ,θ(i))。具体怎么得到的可以参考《统计学习方法》。

因此,任何可以使B(θ,θ(i))增大的θ,也可以使L(θ)增大。为了使L(θ)有尽可能的增长,选择θ(i)使B(θ,θ(i))达到极大。在使B(θ,θ(i))达到极大的过程中,省去对θ的极大化而言是常数的项,剩下的部分,我们给它起了一个名字,就叫做:Q函数。

从形式上看,Q函数是完全数据的对数似然函数关于在给定观测数据和当前参数下对未观测数据的条件概率分布的期望。

总结起来,这种角度的EM算法框架如下:

loop

  • E-step:求Q函数;
  • M-step:求使Q函数极大的当前参数的取值;

end

这里面有几个细节需要说明一下;

细节一:

在使用Jensen不等式的时候,需要假设隐变量服从某种形式的概率分布,才可以将推导过程的一部分看成是期望的表达形式从而应用Jensen不等式。然而这个分布不是随便指定的。我们令Jensen不等式取等号的时候,可以计算出这个分布其实就是:已知观测数据的隐变量的后验概率分布。由于求Q函数需要先求出隐变量的后验概率的期望,因此,这就可以解释为什么EM算法的“通俗”理解角度的E步骤是求隐变量的期望了。

细节二:Q函数与完全数据的对数似然函数的关系

有时候在用EM算法解决某个具体问题的时候,会发现M步骤极大化的居然是完全数据的对数似然函数。这是因为,Q函数虽然是完全数据的对数似然函数的某种期望,但是求这个期望的过程有时其实就是将隐变量的后验概率的期望代入就可以了。因此,本质上我们其实还是在求Q函数的极大。

浅谈EM算法的两个理解角度的更多相关文章

  1. 浅谈分词算法(5)基于字的分词方法(bi-LSTM)

    目录 前言 目录 循环神经网络 基于LSTM的分词 Embedding 数据预处理 模型 如何添加用户词典 前言 很早便规划的浅谈分词算法,总共分为了五个部分,想聊聊自己在各种场景中使用到的分词方法做 ...

  2. 浅谈分词算法(4)基于字的分词方法(CRF)

    目录 前言 目录 条件随机场(conditional random field CRF) 核心点 线性链条件随机场 简化形式 CRF分词 CRF VS HMM 代码实现 训练代码 实验结果 参考文献 ...

  3. 浅谈分词算法(3)基于字的分词方法(HMM)

    目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...

  4. [原创]浅谈在创业公司对PMF的理解

    [原创]浅谈在创业公司对PMF的理解 在创业时,大多数人都常谈一个词叫"MVP“,但PMF谈的比较少,PMF在创业公司尤为重要,以下谈谈个人一些看法. 1.什么是PMF? 创业公司:一种是找 ...

  5. 浅谈分词算法基于字的分词方法(HMM)

    前言 在浅谈分词算法(1)分词中的基本问题我们讨论过基于词典的分词和基于字的分词两大类,在浅谈分词算法(2)基于词典的分词方法文中我们利用n-gram实现了基于词典的分词方法.在(1)中,我们也讨论了 ...

  6. [原创]浅谈在创业公司对MVP的理解

    [原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...

  7. 浅谈KMP算法及其next[]数组

    KMP算法是众多优秀的模式串匹配算法中较早诞生的一个,也是相对最为人所知的一个. 算法实现简单,运行效率高,时间复杂度为O(n+m)(n和m分别为目标串和模式串的长度) 当字符串长度和字符集大小的比值 ...

  8. 浅谈 Johnson 算法

    目录 前言 引入 算法概述 算法流程 正确性证明 代码实现 结语 前言 Johnson 和 Floyd 一样是用来解决无负环图上的全源最短路. 在稀疏图上的表现远远超过 Floyd,时间复杂度 \(O ...

  9. 浅谈Manacher算法与扩展KMP之间的联系

    首先,在谈到Manacher算法之前,我们先来看一个小问题:给定一个字符串S,求该字符串的最长回文子串的长度.对于该问题的求解.网上解法颇多.时间复杂度也不尽同样,这里列述几种常见的解法. 解法一   ...

随机推荐

  1. Word 2013无法启用Restrict Editing解决方法

    当前文档可能是Mail Merge Letter type document,MAILINGS -> Start Mail Merge -> Normal Word Document保存即 ...

  2. 【BZOJ5146】有趣的概率 概率+组合数(微积分)

    [BZOJ5146]有趣的概率 Description "可爱的妹子就像有理数一样多,但是我们知道的,你在数轴上随便取一个点取到有理数的概率总是0,"芽衣在床上自顾自的说着这句充满 ...

  3. spark 将dataframe数据写入Hive分区表

    从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ...

  4. 转基于概率的矩阵分解原理详解(PMF)

    上一篇博客讲到了推荐系统中常用的矩阵分解方法,RegularizedMF是对BasicMF的优化,而PMF是在RegularizedMF的基础上,引入概率模型进一步优化.假设用户U和项目V的特征矩阵均 ...

  5. MatLab Mark Points 给点标序号

    在MatLab中,我们有时要给画出的点按一定顺序标上序号,下面这个简单的例子实现这个功能: x=rand(,); y=rand(,); plot(x,y,'r*'); text(x+:));

  6. [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

    写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...

  7. iptables、防火墙配置、NAT端口映射

    一,配置一个filter表放火墙 (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) targ ...

  8. js备忘录_2

    JS函数的参数在function内可以用arguments对象来获取. 转化为数组:var arr=Array.prototype.slice.call(arguments,0); Array有两个: ...

  9. 忽略Git仓库中已经存在的文件

    解决方案 使用Git bash进入到要忽略的文件所在的文件夹,执行以下命令即可 git update-index --assume-unchanged rebel.xml 参考 Ignore Git ...

  10. 基于express + express-myconnection 的请求处理模板

    前提: 开发APP时经常会用到后台提供的接口,作为一个一直搞前端的程序员.如何写后台这事不能真的一窍不通把.所以还是多多少少了解一些后台. 以前尝试过用java 的spring + springMVC ...