序
这个和我的硕士毕业论文的题目就有一定关系,我的导师让我按时向她汇报学习进度。然而我还在进行实习,还要准备自己明年的秋招,只能想办法游走于三者之间。
EM算法是一个常用的数据挖掘算法,想必从事数据挖掘的相关工作的同学一定比较熟悉,至少是有所耳闻。
1 EM算法的概念和介绍
1.1 一些基本概念
EM算法(Expectation-Maximization Algorithm)是一种通过不断迭代进而使模型的参数收敛,进而得到模型参数的算法。常用于具有隐变量的参数估计(极大似然估计或者极大后验概率估计)。
隐变量是不可观测的随机变量,我们通常通过可观测变量的样本对隐变量作出推断。简而言之,我们手里有一堆数据,我们需要将这对数据分成很多类别,但这些数据并没有任何标签信息。虽然没有标签信息但是这些数据都有很多特征变量,我们可以根据这些特征变量给这些数据进行人为的分类,这便称为”聚类“。而用来标记划分出来的各个类别的那个变量便是”隐变量“。因此,EM算法是一种无监督学习。
极大似然估计(MLE)和极大后验概率估计(MAP)是有一定区别的。简而言之,极大后验概率估计考虑先验知识对统计结果的影响,和极大似然估计只是从统计结果得到的频率出发,并不考虑这个频率是否一定符合所有情况(因为,当样本数量不够多的时候,统计结果得到的频率可能并不准确)。具体的区别可以简单地认为极大后验概率估计MAP在优化时比极大似然估计MLE多了一个先验项。详细内容可以参考这位博主的文章:
极大似然估计与最大后验概率估计的区别https://zhuanlan.zhihu.com/p/40024110
1.2 EM算法的大致思想
首先根据己经给出的观测数据,估计出模型参数的值(初始化);然后再依据上一步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前己经观测到的数据重新再对参数值进行估计,然后反复迭代,直至最后收敛,迭代结束。
1.3 EM算法的具体步骤
- 先得给予需要估计的参数一个值。
- 进行”E步“的操作:利用现有样本对隐变量进行参数估计,求出隐变量的期望,以初步判断期望样本属于哪一类。
- 进行”M步“的操作:根据上一步E步求得的隐变量的结果,通过参数估计(一般是MLE或者MAP)得到新的参数值。
- 将”M步“得到的新的参数数值重新代入步骤二(E步),然后反复迭代,经过多个E步和M步直至收敛。
如果要我举一个例子的的话,我觉得还是网上抛硬币那个更容易理解。对于这个例子,只是有些人写的容易理解,有些人写的让人看不懂,从本身来讲这个例子讲的是很清晰,很不错的。这里我推荐这位博主的文章。他在自己博客第三章:《EM算法》,的第一节:《举例说明EM算法用来干啥》中,解释的还是相当清楚的,具体内容我就不特意转载了,这里给出链接:
EM算法详解(请看第三章第一节:《举例说明EM算法用来干啥》)https://zhuanlan.zhihu.com/p/367714302
2 EM算法的推导和代码实现
2.1 EM算法的推导
下面给出EM算法各个步骤的公式,接着对公式进行推导。假设在第i次迭代后参数的估计值为,对于第i+1次迭代,分为两步:
- E步,求期望:
- M步,最大化:
其中,被称为Q函数,是EM算法的核心。Q函数的推导如下:给定一组观测数据记为,以及参数。假设是独立同分布,因此有以下的对数似然函数:
可以通过极大似然估计来求解最优参数,即:
但是由于隐变量的存在,变为
累加使得直接求解式,变得十分困难。一个办法是通过构造一个容易优化的有关对数似然函数的下界函数,通过不断迭代优化下界,从而逼近最优参数。
记隐变量Z的概率分布q(Z),满足:
有以下等式成立:
两边同时取对数
同时求两边在Z上的期望
因为与Z无关,所以求期望仍然不变:
接着,将右边展开
其中,KL是相对熵
以上,便是E步骤的全部。由,可以得到M步的公式:
2.1 EM算法的代码实现
未完待续...