看了很多介绍EM算法的文章,但是他们都没有代码,所以在这里写出来。
Jensen 不等式
参考期望最大算法
Jensen不等式在优化理论中大量用到,首先来回顾下凸函数和凹函数的定义。假设
是定义域为实数的函数,如果对于所有的
,
的二阶导数大于等于0,那么
是凸函数。当
是向量时,如果hessian矩阵
是半正定(即
是凸函数)。如果,
的二阶导数小于0或者
就是凹函数。
Jensen不等式描述如下:
- 如果
是凸函数,是随机变量,则是严格凸函数时,则
- 如果
是凹函数,是随机变量,则,当是(严格)凹函数当且仅当是(严格)凸函
EM思想
极大似然函数法估计参数的一般步骤:
- 写出似然函数
- 取对数
- 求导数,并令导数为0
- 解似然方程
给定
个训练样本
,假设样本之间相互独立,要拟合模型
。根据分布我们可以得到如下的似然函数:
需要对每个样本实例的每个可能的类别
求联合概率分布之和,即
。
如果
是已知的,那么使用极大似然估计参数
会很容易。
然而上式存在一个不确定的隐含变量(latent random variable)
,这种情况下EM算法就派上用场了。
由于不能直接最大化
,所以只能不断地建立
的下界(E-step),再优化下界。一直迭代直到算法收敛到局部最优解。
EM算法通过引入隐含变量,使用MLE(极大似然估计)进行迭代求解参数。通常引