最近在看李航《统计学习方法》中关于em算法的部分,说实话不是很好理解,为了弄明白这个东东到底是要干嘛,以及其相应的推导,在网上查了不少资料。网上相关的证明推导很多,本文主要按照我自己的逻辑,写点自己对于这部分知识的理解,有什么不对的地方欢迎大家指出来!
EM算法
算法思想
首先引入一个经典例子来说明,假设我们现在想调查一个学校男女学生身高分布情况,首先随机抽取出了100个学生,每个学生的身高随机变量X已知,并且知道男生和女生分别服从同一分布(假设是高斯分布,其他分布也行),我们的最终目的是求得分布的参数。那么存在两种情况:
- 对于这100个学生,性别是已知的。
- 对于这100个学生,性别是未知的。
第一种情况:性别已知,很简单,根据是男是女可以知道其属于哪个分布(男生分布或女生分布),构造出极大似然函数,然后求导,就可以求出两个分布的参数(高斯函数)相应的参数。
第二种情况:性别未知,也就是说抓过来一个学生,我们都不知道其是男是女(呵呵,还真有可能布吉岛),EM算法就是用来求解这种情况的!
下面正式介绍EM算法:
(1)由原问题构造出极大似然函数
在这个例子中,随机变量身高X是已知的,X就是观测变量,性别z是未知的(但是客观存在,只是我们不知道罢了),z就是隐变量。
对于一个包含m个样本的集合,假设隐变量z服从某未知分布,那么构造出的极大似然模型为:
理论上,对上述极大似然函数针对每个参数求偏导就可以,然而式子中包含和的对数形式,按照李航《统计学习方法》中所说,是没有解析解的。需要通过迭代的方法求解,首先通过jensen不等式进行处理。
(2)jensen不等式处理似然函数
jensen不等式:假设X是一个随机变量,f(x)是一个凸函数(一元:二阶导大于等于0,多元:海塞矩阵半正定),则:
如果二阶导大于零(海塞矩阵正定),f(X)是严格不等式,当x是常量时,取等号。凹函数不等式方向取反。
根据jensen不等式,对原极大似然函数进行变换:
其中
(3)转换条件
其实就是要使式(3)是的紧下界,即至少有点使(3)式中=号成立,由jensen不等式知,当x为常量,即变量
等于一个常数constant时:
再根据条件
最终
(4)EM算法
也就是说我们需要根据模型参数求出隐变量z的分布(即第i个样本属于哪一个模型)
,然后带入(3)式极大似然函数中求解
。。。。矛盾就出来了:求
需要已知
,求
需要已知
,对于开头举的例子来说就是:想要估计学生身高分布模型(混合高斯)的参数,我们需要先知道每个人是男是女,而想要知道性别又要先知道每个人所服从的分布。想要“鸡”需要先有“蛋”,想要“蛋”需要先有“鸡”,怎么办呢?
EM算法的思想就是:先随机初始参数打破僵局,继而求出隐变量z的分布
,代入(3)式计算,得到一个更优的参数
。。。这样不断更新参数,达到最终一个收敛值(是可以收敛的,这里就不证明了,有兴趣可以看下《统计学习方法》,里面有详细的证明)。
EM算法步骤:
E步:根据参数初始值或上一次迭代的模型参数来计算出隐性变量的后验概率,其实就是隐性变量的期望。作为隐藏变量的现估计值:
F步:根据极大似然函数(3)式,求得新的模型参数
后记
EM算法一般用于非监督学习中,常见的应用如求解高斯混合模型,另外k-means聚类算法中也用到了EM算法的思想:(1)E步:想要聚类,需要先知道有哪几类,因此先初始化k个点作为类中心。(2)F步:根据得到的中心,对每个样本归类,然后更新得到新的类中心。
从这里我们也可以看出聚类和分类的联系,聚类时虽然不知道样本的类别,但是过程中隐含的假设并用到了样本的类别,分类则是直接告诉了样本类别。
参考
《统计学习方法》 —-李航
(1)https://www.cnblogs.com/yymn/p/4769736.html
(2)http://blog.csdn.net/zouxy09/article/details/8537620
(3)https://www.cnblogs.com/txg198955/p/4097543.html