学习笔记——EM算法
EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望(expectation);M步,求极大(Maximization)。
EM算法的引入
给一些观察数据,可以使用极大似然估计法,或贝叶斯估计法估计模型参数。但是当模型含有隐变量时,就不能简单地使用这些方法。有些时候,参数的极大似然估计问题没有解析解,只能通过迭代的方法求解,EM算法就是可以用于求解这个问题的一种迭代算法。
- EM算法
- 输入:观测变量数据Y,隐变量数据Z,联合分布\(P(Y, X | \theta)\),条件分布\(P(Z|Y, \theta)\);
- 输出:模型参数\(\theta\)
- 选择参数的初值\(\theta^{(0)}\),开始迭代;
- E步:记\(\theta^{(0)}\)为第\(i\)次迭代参数\(\theta\)的估计值,在第\(i+1\)次迭代的E步,计算\[Q(\theta, \theta^{(i)}) = E_Z[\log P(Y, Z|\theta) | Y, \theta^{(i)}]\] \[= \sum_Z \log P(Y, Z | \theta) P (Z|Y, \theta^{(i)})\] 这里,\(P(Z|Y, \theta^{(i)})\)是在给定观测数据Y和当前的参数估计\(\theta^{(i)}\)下隐变量数据Z的条件概率分布;
- M步:求使\(Q(\theta, \theta^{(i)})\)极大化的\(\theta\),确定第\(i+1\)次迭代的参数的估计值\(\theta^{(i+1)}\) \[\theta^{(i+1)} = \arg \max_{\theta} Q(\theta, \theta^{(i)})\]
- 重复第(2)步和第(3)步,直到收敛。
其中的函数\(Q(\theta, \theta^{(i)})\)是EM算法的核心。称为Q函数。
Q函数:完全数据的对数似然函数\(\log P(Y, Z | \theta)\)关于在给定观测数据Y和当前参数\(\theta^{(i)}\)下对未观测数据Z的条件概率分布\(P(Z|Y, \theta^{i})\)的期望,\[Q(\theta, \theta^{(i)}) = E_Z[\log P(Y, Z|\theta) | Y, \theta^{(i)}]\] \[= \sum_Z P(Z | Y, \theta^{(i)}) \log P(Y, Z | \theta)\]
可以证明,每次迭代使似然函数增大或达到局部极值。
EM算法可以用于生成模型的非监督学习,生成模型由联合概率分布\(P(X, Y)\)表示,可以认为非监督学习训练数据是联合概率分布产生的数据,X为观测数据,Y为未观测数据。
在应用中,初值的选择变得非常重要。常用的办法是选取几个不同的初值进行迭代,然后对得到的各个估计值加以比较,从中选择最好的。
EM算法在高斯混合模型学习中的应用
- 高斯混合模型是指具有以下形式的概率分布模型:\[P(y | \theta) = \sum_{k = 1}^K \alpha_k \phi(y|\theta_k)\] 其中,\(\alpha_k\)是系数,\(\alpha_k \geq 0\),\(\sum_{k=1}^K \alpha_k = 1\);\(\phi\)是高斯分布密度,\(\theta_k = (\mu_k, \sigma_k^2)\),\[\phi(y|\theta_k) = \frac{1}{\sqrt{2\pi} \sigma_k} \exp (-\frac{(y - \mu_k)^2}{2 \sigma_k^2})\]称为第k个分模型。
使用EM算法进行高斯混合模型参数估计
假设观测数据\(y_1,y_2,...,y_N\)由高斯混合模型生成,\[P(y | \theta) = \sum_{k = 1}^K \alpha_k \phi(y|\theta_k)\]其中,\(\theta = (\alpha_1, \alpha_2, ..., \alpha_K; \theta_1, \theta_2,...,\theta_K)\)。我们用EM算法估计高斯混合模型的参数\(\theta\)。
明确隐变量,写出完全数据的对数似然函数
可以认为观测数据是这样产生的:首先依概率\(\alpha_k\)选择第k个分模型,然后根据这个分模型的概率分布生成一个数据。计算出完全数据的对数似然函数为\[\log P(y, \gamma | \theta) = \sum_{k = 1}^K n_k \log \alpha_k + \sum_{j = 1}^N \gamma_{jk} [\log(\frac{1}{\sqrt{2\pi}}) - \log \sigma_k - \frac{1}{2\sigma^2} (y_i - \mu_k)^2]\]其中,\(\gamma_{jk}\)为1代表第j个观测来自第k个分模型,否则为0,\(n_k = \sum_{j=1}^N \gamma_{jk}\),\(\sum_{k=1}^K n_k = N\)。
观测数据\(y_j\)及未观测数据\(\gamma_{jk}\),完全数据是\((y_j,\gamma_{j1},\gamma_{j2},...,\gamma_{jK}, j = 1,2,...,N\)EM算法的E步:确定Q函数
计算出Q函数为:\[Q(\theta, \theta^{(i)}) = \sum_{k=1}^K n_k \log \alpha_k + \sum_{k=1}^N \hat{\gamma}_{jk} [\log (\frac{1}{\sqrt{2\pi}}) - \log \sigma_k - \frac{1}{2\sigma_k^2} (y_i - \mu_k)^2]\] 其中,\[\hat{\gamma}_{jk} = E(\gamma_{jk} | y, \theta) = \frac{\alpha_k \phi (y_i | \theta_k)}{\sum_{k=1}^K \alpha_k \phi (y_i | \theta_k)}\] \[n_k = \sum_{j = 1}^N E\gamma_{jk}\]确定EM算法中的M步
迭代的M步是求函数\(Q(\theta, \theta^{(i)})\)对\(\theta\)的极大值,即求新一轮迭代的模型参数:\[\theta^{(i+1)} = \arg \max_{\theta} Q(\theta, \theta^{(i)})\]
通过求偏导可以得到计算相应参数的表达式。
- 高斯混合模型参数估计的EM算法
- 输入:观测数据\(y_1, y_2,...,y_N\),高斯混合模型
- 输出:高斯混合模型参数。
- 取参数的初始值开始迭代
- E步:依据当前模型参数,计算分模型k对观测数据\(y_i\)的响应度\[\hat{\gamma}_{jk} = \frac{\alpha_k \phi (y_i | \theta_k)}{\sum_{k=1}^K \alpha_k \phi (y_i | \theta_k)}, j = 1,2,...,N; k = 1,2,...,K\]
- M步:计算新一轮迭代的模型参数:\[\hat{\mu_k} = \frac{\sum_{j=1}^N \hat{\gamma}_{jk} y_j}{\sum_{j = 1}^N \hat{\gamma}_{jk}}, k = 1,2,...,K\] \[\hat{\sigma}_k^2 = \frac{\sum_{j=1}^N \hat{\gamma}_{jk} (y_j - \mu_k)^2}{\sum_{k=1}^N \hat{\gamma}_{jk}}, k = 1,2,...,K\] \[\hat{\alpha}_k = \frac{\sum_{j=1}^N \hat{\gamma}_{jk}}{N}, k = 1,2,...,K\]
- 重复第(2)步和第(3)步,直到收敛。
- EM算法还可以解释为F函数的极大-极大算法,基于这个解释有若干变形与推广,如广义期望极大(GEM)算法。
(注:本文为读书笔记与总结,侧重算法原理,来源为《统计学习方法》一书第九章)
作者:rubbninja
出处:http://www.cnblogs.com/rubbninja/
关于作者:目前主要研究领域为机器学习与无线定位技术,欢迎讨论与指正!
学习笔记——EM算法的更多相关文章
- [ML学习笔记] XGBoost算法
[ML学习笔记] XGBoost算法 回归树 决策树可用于分类和回归,分类的结果是离散值(类别),回归的结果是连续值(数值),但本质都是特征(feature)到结果/标签(label)之间的映射. 这 ...
- 统计学习方法笔记--EM算法--三硬币例子补充
本文,意在说明<统计学习方法>第九章EM算法的三硬币例子,公式(9.5-9.6如何而来) 下面是(公式9.5-9.8)的说明, 本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流 ...
- 机器学习笔记—EM 算法
EM 算法所面对的问题跟之前的不一样,要复杂一些. EM 算法所用的概率模型,既含有观测变量,又含有隐变量.如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法来估计 ...
- 学习笔记 - Manacher算法
Manacher算法 - 学习笔记 是从最近Codeforces的一场比赛了解到这个算法的~ 非常新奇,毕竟是第一次听说 \(O(n)\) 的回文串算法 我在 vjudge 上开了一个[练习],有兴趣 ...
- 数据挖掘学习笔记--AdaBoost算法(一)
声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...
- 学习笔记-KMP算法
按照学习计划和TimeMachine学长的推荐,学习了一下KMP算法. 昨晚晚自习下课前粗略的看了看,发现根本理解不了高端的next数组啊有木有,不过好在在今天系统的学习了之后感觉是有很大提升的了,起 ...
- Java学习笔记——排序算法之快速排序
会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...
- Java学习笔记——排序算法之进阶排序(堆排序与分治并归排序)
春蚕到死丝方尽,蜡炬成灰泪始干 --无题 这里介绍两个比较难的算法: 1.堆排序 2.分治并归排序 先说堆. 这里请大家先自行了解完全二叉树的数据结构. 堆是完全二叉树.大顶堆是在堆中,任意双亲值都大 ...
- Java学习笔记——排序算法之希尔排序(Shell Sort)
落日楼头,断鸿声里,江南游子.把吴钩看了,栏杆拍遍,无人会,登临意. --水龙吟·登建康赏心亭 希尔算法是希尔(D.L.Shell)于1959年提出的一种排序算法.是第一个时间复杂度突破O(n²)的算 ...
随机推荐
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- Oracle常用函数汇总
在Oracle OCP考试中,相当一部分知识点涉及到对于Oracle常见函数的考查.尽管Oracle官方文档SQL Language Reference中Functions一章内列举了所有Oracle ...
- Android使用最小宽度限定符时最小宽度的计算
Android开发中最头疼的问题之一就是兼容不同尺寸和分辨率的设备.这里推荐一篇总结的比较完整的<Android开发:最全面.最易懂的Android屏幕适配解决方案>.这篇文章对屏幕兼容的 ...
- XML中的转义字符
HTML中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & 或 & &a ...
- 初识Android Studio
刚开始接触Android Studio,很多不适应的地方,自己慢慢摸索,记录下了一些问题和解决途径. 为了能使用android虚拟机,需要下载镜像,镜像有基于arm架构的也有基于intelx86.x6 ...
- 怎么知道Fragment属于哪个Activity呢?
如果程序是一条线运行的,Fragment 中 getActivity() 是获取的上一个打开或者执行的Activity中的值. 多个Activity也是如此,就看顺序是怎么执行的,getActiv ...
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- java基础学习03(java基础程序设计)
java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...
- 对比Haproxy和Nginx负载均衡效果
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...