【转载请注明出处】http://www.cnblogs.com/mashiqi

2014/11/18

更新。发现以前的公式(2)里有错误,现已改过来。由于这几天和Can讨论了EM算法,回头看我以前写的这篇博客的时候,就发现公式里面有一个错误(多了一个连加符号),现在改正过来了。经过和Can的讨论,我又认真思考了EM算法,发现以前确实是没有弄懂这个算法的本质的。加油,以后学习知识不要只停留在表面上,要有insight!!!

2014/5/19

本文公式编辑捉鸡,请知道怎么在博客园里高效编辑公式的朋友告诉我一下,感激不尽了!

以前其实写过一个关于最大期望算法的文档,但是由于那次教研室电脑硬盘出问题,当时又没有随时备份重要文件的习惯,所以就弄没了。今天又看到EM算法,于是今天又花了40分钟重新把这个算法的思路整理了一遍,这真的是在浪费生命啊。。。所以说,这也是对以下观点的一个有力的证据之一:写文档或写学习记录真的是一件很重要的事。

本文只是从数学的角度分析EM算法,并没有对算法所反映出来的关于数据的本质问题进行刻画,所以若想通过本文学习EM算法,应该是有所欠缺的,毕竟在某些领域数学并不是全部,只是工具。然而,在翻看大部分讲解EM算法的资料时,我都被极为不好理解的公式符号所吓倒,于是打算自己写一篇关于EM算法的,有关具体公式的博文——1是用来梳理自己的思路,给自己做个笔记,免得以后忘记了EM算法又要花上一两个小时来自己推公式理解;2是用来给具有和我有同样问题的朋友们,提供帮助。或许您也在知道了"EM算法是通过琴生不等式来不断优化似然函数的下界从而求得似然解"后对此算法的理论公式表示不解,那么本文或许能给你提供一下帮助。下面进入正题。

假设我们已知数据集${x_i}$的分布$p(x)$收到参数$\theta$的影响,然后我们要做以下似然估计:

(1)

这里补充一句,为了养成较好的区别"频率学派"的"贝叶斯学派"的观点,我从一些教科书上学到,一般采取这种记法:

当将$\theta$看做未知且固定的参数时,统一使用符号";":$p(x;\theta)$

当将$\theta$看做具有先验分布的参数时,统一使用符号"|":$p(x|\theta)$

回到(1)式,当这里还有一个隐变量时,我们通过如下迭代方法来求解(1)式:

  1. 记$L(\theta ) = \sum\nolimits_i {\ln p({x_i};\theta )} $,于是我们有:

  (2)

  1. (E步)记,${l_n}(\theta ) = \sum\nolimits_i { \left\{ \sum\nolimits_j {p({z_j}\left| {{x_i}} \right.;{\theta ^{(n)}})\ln \left[ { {\frac{{p({x_i},{z_j};\theta )}}{{p({x_i},{z_j};{\theta ^{(n)}})}}} } \right]} \right\}} $,我们得到:

$$L(\theta ) \ge {l_n}(\theta ) + L({\theta ^{(n)}})$$   (3)

注意到${l_n}({\theta ^{(n)}}) = 0$,于是我们有:

$$L({\theta ^{(n)}}) \ge {l_n}({\theta ^{(n)}}) + L({\theta ^{(n)}}) = L({\theta ^{(n)}})$$  (4)

  1. (M步)我们优化${l_n}(\theta )$:

$${\theta ^{(n + 1)}} = \arg {\max _\theta }{l_n}(\theta )$$  (5)

于是从(3)式我们得到:

$$\begin{array}{l}
L({\theta ^{(n + 1)}}) \ge {l_n}({\theta ^{(n + 1)}}) + L({\theta ^{(n)}}) \ge {l_n}({\theta ^{(n)}}) + L({\theta ^{(n)}})\\
{\kern 42pt} = L({\theta ^{(n)}})
\end{array}$$

通过上面的步骤,我们可以得到序列$\{ {\theta _n}\} $使得使得似然函数一步步变大:$L({\theta ^{(1)}}) \le  \cdots  \le L({\theta ^{(n)}}) \le L({\theta ^{(n + 1)}}) \le  \cdots $。至于序列$ {\theta _n} $是否收敛于${\theta ^*}$,我还没有学习到 :)

在(2)式的第二行,凭空增加的$p({z_j}\left| {{x_i}} \right.;{\theta ^{(n)}})$是为了后面能配出一个$L({\theta ^{(n)}})$来。若不明白,我们可以先假设增加一项未知的$q({z_j};{\theta ^{(n)}})$,为了用到琴生不等式,我们要求$\sum\nolimits_j {q({z_j};{\theta ^{(n)}})}  = 1$于是我们得到:

显然,若取$q({z_j};{\theta ^{(n)}}) = p({z_j}\left| {{x_i}} \right.;{\theta ^{(n)}})$,则我们能得到:

从数学角度看最大期望(EM)算法 I的更多相关文章

  1. 从数学角度看最大期望(EM)算法 II

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2015/3/13 对于隐变量只有有限个取值(比如$N$个)的情况,我们可以将隐变量表示为${z_j} = [{z_{j ...

  2. 数据挖掘十大经典算法(5) 最大期望(EM)算法

    在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Lat ...

  3. 详解十大经典机器学习算法——EM算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第14篇文章,我们来聊聊大名鼎鼎的EM算法. EM算法的英文全称是Expectation-maximization al ...

  4. python机器学习笔记:EM算法

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

  5. EM算法(Expectation Maximization Algorithm)

    EM算法(Expectation Maximization Algorithm) 1. 前言   这是本人写的第一篇博客(2013年4月5日发在cnblogs上,现在迁移过来),是学习李航老师的< ...

  6. PLSA及EM算法

    前言:本文主要介绍PLSA及EM算法,首先给出LSA(隐性语义分析)的早期方法SVD,然后引入基于概率的PLSA模型,其参数学习采用EM算法.接着我们分析如何运用EM算法估计一个简单的mixture ...

  7. Expectation-Maximization(EM) 算法

    Expectation-Maximization 算法是统计学中用来给带隐含变量的模型做最大似然(和最大后验概率)的一种方法.EM 的应用特别广泛,经典的比如做概率密度估计用的 Gaussian Mi ...

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

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

  9. EM最大期望化算法

    最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...

随机推荐

  1. [转]C# 应用程序安装部署步骤,安装前操作,先退出程序后卸载。

    1. 点击[文件]-[新建]-[项目]-其他项目类型-安装和部署,选择安装项目,在下面的名称栏填写SetupTest(或者选择安装向导,一直点击[下一步])2. 安装项目----六个子项依次为:文件系 ...

  2. 铁人系列(2)LA2218

    思路:对于每个人  都会有n-1个半片面  加上x>0,y>0,1-x-y>0(这里的1抽象为总长) 代码是粘贴的  原来写的不见了  orz............ // LA22 ...

  3. JAVA输出图形(网上找的)

    public class TuXing { public static void main(String[] args) { int i, j, k; for (i = 1; i <= 5; i ...

  4. Oracle创建表

    //创建表,列的内容 -- Create tablecreate table T_HQ_PC( pinpai VARCHAR2(20) not null, xingh VARCHAR2(40), ji ...

  5. bzoj 1926: [Sdoi2010]粟粟的书架

    #include<cstdio> #include<iostream> #define N 201 #define M 500008 using namespace std; ...

  6. libpng交叉编译安装

    tar xzf libpng-1.5.22.tar.gz cd libpng-1.5.22 mkdir tmp 打开Makefile文件并修改CC=arm-linux-gcc ./configure ...

  7. linux下挂载硬盘,解决阿里云挂载后重启消失的问题

    完整的阿里云挂载数据盘方法如下: 1.入手阿里云后查看有几块硬盘:(只显示概况,不显示分区情况) fdisk -l|grep Disk 2.查看硬盘分区 fdisk -l 如果有提示:disk /de ...

  8. cmd打开控制面板及其他命令

    如果你在权限较小的域用户的机器上,要做一些管理操作,就不可避免的要使用cmd打开一些以前只能在图形界面里打开的程序.下面是我收集的一些常用操作. 以某个身份启动程序:runas /user:it\n1 ...

  9. HDU 1693 二进制表示的简单插头dp

    题目大意: 找到多条回路覆盖所有非障碍格子,问这样回路的种数 这里的插头与URAL1519 不一样的是 只要管它是否存在即可,只需要1个二进制位表示状态 #include <cstdio> ...

  10. [windows驱动]windows8.1驱动调试前戏

    人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...