机器学习算法(优化)之二:期望最大化(EM)算法
EM算法概述
(1)数学之美的作者吴军将EM算法称之为上帝的算法,EM算法也是大家公认的机器学习十大经典算法之一。EM是一种专门用于求解参数极大似然估计的迭代算法,具有良好的收敛性和每次迭代都能使似然函数值单调不减的优良性质。在统计机器学习、自然语言处理等领域应用非常广泛,许多统计学算法都是EM算法的体现,比如说隐含马尔科夫模型的训练方法Baum-Welch算法、最大熵模型的训练方法GIS算法、高斯混合模型EM算法、主题模型训练推理的pLSA方法,都是EM算法。甚至连聚类中的k-means算法,看似完全脱离了统计学,其实也可以看作是EM方法的体现。
(2)所以EM算法是统计学中非常核心的一个算法,主要是由于统计学中许多计算问题具有比较特殊的结构,可能数值计算的方法,优化理论算法在这里可能不好用,而这时候EM算法总能巧妙地予以解决。
(3)EM及其extension研究非常多,应用及其广泛。EM算法甚至可以说不仅仅是一个算法,而是一种思想,一个方法论,指导我们遇到某些问题时,如何去找到一个具备EM思想的迭代算法。
EM基本思想
(1)EM是一种专门用于求解参数极大似然估计的迭代算法。首先,提出这个算法,最开始是为有缺失数据条件下的参数估计提供了一个标准的理论框架。所以在最开始所研究的问题中确实存在数据的缺失。
(2)但是很快地,就延伸出去了,假设原始数据是完全的【注1】,但由于似然函数的求解十分困难,而额外添加一些数据就能将原来十分复杂的过程转化成一系列简单的似然函数优化问题,于是原始数据人为地变成了不完全数据【例1】。
上述两种情形,都可以看作是与缺失数据有关的问题,都会结合EM算法来分析,也难怪有学者称EM算法和缺失数据如同一对孪生姐妹一般总是如影随形。
(3)进一步延伸,用于含有隐变量(latent variable)的概率参数模型的最大似然估计或极大后验概率估计。
E、M过程
在一般性的问题中,如果有非常多的观测数据,让计算机不断迭代来学习一个模型,EM算法包含E、M两个过程。
(E):根据现有的模型,计算各个观测数据输入到模型中的计算结果,这个过程称为期望值计算过程(Expectation),即E过程;
(M):将(E)的计算作为输入,重新计算模型参数参数,以最大化(Maximization)某个我们定义的目标函数,即M过程。如此迭代,直到达到我们的预设条件。
上述两个过程被成为EM算法。
实例
(1)高斯混合模型
关于GMM(高斯混合模型),可以参考我的另一篇文章:http://www.cnblogs.com/itboys/p/8400207.html
GMM是理解EM算法比较简单的一个例子。
(2)K-means聚类:
(E)根据现有的聚类结果(比如说k个聚类中心点),可以按某个聚类的规则对所有的数据点重新进行划分。
(M)根据(E)重新划分的结果,以最大化某个目标函数,得到新的聚类结果,如果没有达到我们预设的条件,就重复(E)。
如k-means中,定义的聚类的规则是:最近原则,每个点归到最近距离的中心所在的类(可以理解为计算每个点的期望值)。
目标函数,同一类各个点到中心的平均距离d最近,即-d最大;同时不同类中心之间的平均距离D最远。按照使得D,-d最大化(每次迭代比前一次大)的原则,完成M过程,得到新的聚类中心。
参考文献
(1)CSDN博客 小硒—代码无疆 《 数据挖掘十大算法—-EM算法(最大期望算法)》 http://blog.csdn.net/u011067360/article/details/23702125?utm_source=tuicool&utm_medium=referral:以一个简单的例子演示了EM算法是如何推导出来的,例子中隐含变量是两个方差相同,均值不同的高斯分布,观测结果是一系列观测值x,例子很简单,适合演示EM过程.
(2)吴军《数学之美》第二版 《第27章 再谈文本自动分类问题——期望最大化算法》, 一如既往的,吴军的数学之美是学习一个算法首先推荐学习的一个材料,深入浅出,他往往先讲“道”,后讲或者少讲”术“,强调”术“应该尽量简单可靠的理念。在理解了算法的”道“之后,如果觉得细节还不够丰富,具体算法还无法落地,那么就需要看更多的材料了。
(3)K-means聚类算法与EM算法http://www.cnblogs.com/rong86/p/3517573.html
(4) GMM, Gaussian Mixture Model, 高斯混合模型http://blog.csdn.net/manji_lee/article/details/41335307
机器学习算法(优化)之二:期望最大化(EM)算法的更多相关文章
- 机器学习(二十七)— EM算法
1.EM算法要解决的问题 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计. EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜 ...
- 机器学习之支持向量机(二):SMO算法
注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的:若对原作者有损请告知,我会及时处理.转载请标明来源. 序: 我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对 ...
- EM(期望最大化)算法初步认识
不多说,直接上干货! 机器学习十大算法之一:EM算法(即期望最大化算法).能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么 ...
- SIGAI机器学习第二十三集 高斯混合模型与EM算法
讲授高斯混合模型的基本概念,训练算法面临的问题,EM算法的核心思想,算法的实现,实际应用. 大纲: 高斯混合模型简介实际例子训练算法面临的困难EM算法应用-视频背景建模总结 高斯混合模型简写GMM,期 ...
- [算法系列之二十七]Kruskal最小生成树算法
简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...
- GMM及EM算法
GMM及EM算法 标签(空格分隔): 机器学习 前言: EM(Exception Maximizition) -- 期望最大化算法,用于含有隐变量的概率模型参数的极大似然估计: GMM(Gaussia ...
- python机器学习笔记:EM算法
EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断算法等等.本文对于E ...
- 机器学习-EM算法笔记
EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断,混合高斯模型 ...
- 详解十大经典机器学习算法——EM算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第14篇文章,我们来聊聊大名鼎鼎的EM算法. EM算法的英文全称是Expectation-maximization al ...
- EM算法浅析(二)-算法初探
EM算法浅析,我准备写一个系列的文章: EM算法浅析(一)-问题引出 EM算法浅析(二)-算法初探 一.EM算法简介 在EM算法之一--问题引出中我们介绍了硬币的问题,给出了模型的目标函数,提到了这种 ...
随机推荐
- Classification / Recognition
转载 https://handong1587.github.io/deep_learning/2015/10/09/recognition.html#facenet Classification / ...
- 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言
Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...
- Generator生成器函数
接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...
- Javascript特效代码大全(420个)(转)
转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习 ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...
- 漫游Kafka设计篇之消息传输的事务定义(5)
之前讨论了consumer和producer是怎么工作的,现在来讨论一下数据传输方面.数据传输的事务定义通常有以下三种级别: 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输. 最 ...
- jQuery过滤HTML标签并高亮显示关键字的方法
本文实例讲述了jQuery过滤HTML标签并高亮显示关键字的方法.分享给大家供大家参考.具体如下: jQuery实现网页关键字过滤效果,将需要过滤的文字定义在JavaScript中,可定义多个,不过要 ...
- KVC/KVO之暴力的KVC
本章将分为三个部分: KVC是什么 KVC之Set/Get KVC键值路径之Set/Get KVC是什么 KVC,即 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间 ...
- Spring_day02--课程安排_Spring的bean管理(注解)(注解创建对象/注入属性、配置文件和注解混合使用)
Spring_day02 上节内容回顾 今天内容介绍 Spring的bean管理(注解) 注解介绍 Spring注解开发准备 注解创建对象 注解注入属性 配置文件和注解混合使用 AOP概念 AOP原理 ...
- std::ostringstream
ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sp ...
- idea下maven项目增加依赖项目里面没有添加相关依赖jar
困扰了一晚上的问题,一般在pom.xml中增加了相关依赖,idea会自动将依赖的Jar包增加到maven项目中,但是在pom.xml中增加了依赖,项目中并没有 偶然打开idea的侧边栏maven工具栏 ...