【十大经典数据挖掘算法】EM
【十大经典数据挖掘算法】系列
1. 极大似然
极大似然(Maximum Likelihood)估计为用于已知模型的参数估计的统计学方法。比如,我们想了解抛硬币是正面(head)的概率分布\(\theta\);那么可以通过最大似然估计方法求得。假如我们抛硬币\(10\)次,其中\(8\)次正面、\(2\)次反面;极大似然估计参数\(\theta\)值:
\[
\hat{\theta} = \arg\underset{\theta}{\max}\, l(\theta) = \arg\underset{\theta}{\max}\, \theta^8(1-\theta)^2
\]
其中,\(l(\theta)\)为观测变量序列的似然函数(likelihood function of the observation sequence)。对\(l(\theta)\)求偏导
\[
\frac{\partial l(\theta)}{\partial \theta} = \theta^7(1-\theta)(8-10\theta) \Rightarrow \hat{\theta} = 0.8
\]
因为似然函数\(l(\theta)\)不是凹函数(concave),求解极大值困难。一般地,使用与之具有相同单调性的log-likelihood,如图所示

凹函数(concave)与凸函数(convex)的定义如图所示:

从图中可以看出,凹函数“容易”求解极大值,凸函数“容易”求解极小值。
2. EM算法
EM算法(Expectation Maximization)是在含有隐变量(latent variable)的模型下计算最大似然的一种算法。所谓隐变量,是指我们没有办法观测到的变量。比如,有两枚硬币A、B,每一次随机取一枚进行抛掷,我们只能观测到硬币的正面与反面,而不能观测到每一次取的硬币是否为A;则称每一次的选择抛掷硬币为隐变量。
用Y表示观测数据,Z表示隐变量;Y和Z连在一起称为完全数据( complete-data ),观测数据Y又称为不完全数据(incomplete-data)。观测数据的似然函数:
\[
P(Y | \theta) = \sum_{Z} P(Z|\theta)P(Y|Z,\theta)
\]
求模型参数的极大似然估计:
\[
\hat{\theta} = \arg\underset{\theta}{\max}\, \log P(Y | \theta)
\]
因为含有隐变量,此问题无法求解。因此,Dempster等人提出EM算法用于迭代求解近似解。EM算法比较简单,分为两个步骤:
- E步(E-step),以当前参数\(\theta^{(i)}\)计算\(Z\)的期望值
\[
Q(\theta, \theta^{(i)}) = \mathbb{E}_Z[\log P(Y,X|\theta)| Y, \theta^{(i)}]
\]
- M步(M-step),求使\(Q(\theta, \theta^{(i)})\)极大化的\(\theta\),确定第\(i+1\)次迭代的参数的估计值\(\theta^{(i+1)}\)
\[
\theta^{(i+1)} = \arg\underset{\theta}{\max}\, Q(\theta, \theta^{(i)})
\]
如此迭代直至算法收敛。关于算法的推导及收敛性证明,可参看李航的《统计学习方法》及Andrew Ng的《CS229 Lecture notes》。这里有一些极大似然以及EM算法的生动例子。
3. 实例
[2]中给出极大似然与EM算法的实例。如图所示,有两枚硬币A、B,每一个实验随机取一枚抛掷10次,共5个实验,我们可以观测到每一次所取的硬币,估计参数A、B为正面的概率\(\theta = (\theta_A, \theta_B)\),根据极大似然估计求解

如果我们不能观测到每一次所取的硬币,只能用EM算法估计模型参数,算法流程如图所示:

隐变量\(Z\)为每次实验中选择A或B的概率,则第一个实验选择A的概率为
\[
P(z_1 = A |y_1, \theta^{(0)}) = \frac{P(z_1 = A |y_1, \theta^{(0)})}{P(z_1 = A |y_1, \theta^{(0)}) + P(z_1 = B |y_1, \theta^{(0)})} = \frac{0.6^5*0.4^5}{0.6^5*0.4^5 + 0.5^{10}} = 0.45
\]
按照上面的计算方法可依次求出隐变量\(Z\),然后计算极大化的\(\theta^{(i)}\)。经过10次迭代,最终收敛。
4. 参考资料
[1] 李航,《统计学习方法》.
[2] Chuong B Do & Serafim Batzoglou, What is the expectation maximization algorithm?
[3] Pieter Abbeel, Maximum Likelihood (ML), Expectation Maximization (EM).
[4] Rudan Chen,【机器学习算法系列之一】EM算法实例分析.
【十大经典数据挖掘算法】EM的更多相关文章
- 【十大经典数据挖掘算法】PageRank
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 【十大经典数据挖掘算法】SVM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...
- 【十大经典数据挖掘算法】Naïve Bayes
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...
- 【十大经典数据挖掘算法】C4.5
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...
- 【十大经典数据挖掘算法】k-means
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 引言 k-means与kNN虽 ...
- 【十大经典数据挖掘算法】Apriori
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 关联分析 关联分析是一类非常有 ...
- 【十大经典数据挖掘算法】kNN
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 引言 顶级数据挖掘会议ICDM ...
- 【十大经典数据挖掘算法】CART
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 前言 分类与回归树(Class ...
随机推荐
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- 0-1背包问题蛮力法求解(java版本)
sloves: package BackPack; public class Solves { public int[] DecimaltoBinary(int n,int m) { int ...
- angular实现统一的消息服务
后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...
- 我为NET狂官方面试题-数据库篇
求结果:select "1"? 查找包含"objs"的表?查找包含"o"的数据库? 求今天距离2002年有多少年,多少天? 请用一句SQL获 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- 漫谈TCP
不得不承认,tcp是一个非常复杂的协议.它包含了RFC793及之后的一些协议.能把tcp的所有方面面面具到地说清楚,本身就是个很复杂的事情.如果再讲得枯燥,那么就会更让人昏昏欲睡了.本文希望能尽量用稍 ...
- 将DataTable中的某列转换成数组或者List
string[] arrRate = dtRate.AsEnumerable().Select(d => d.Field<string>("arry")).ToA ...
- MSYS2环境下编译X265
HEVC(High Efficiency Video Coding),是一种新的视频压缩标准.可以替代H.264/ AVC编码,使得保持相同质量的情况下,体积减少40%左右.目前有多种实现版本,x26 ...
- 访问者模式(visitorpattern)
/** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...
- Jquery 获得当前标签的名称和标签属性
得到标签的名称 $("#name").prop("tagName"); 或者 $("#name")[0].tagName; 注意:1.得到的 ...