在机器学习问题中,经常需要根据采样数据,推测其分布。一般都要用到极大似然估计(maximum likelihood)。
比如对于一组数据{ x1,x2,...,xm },假设其分布函数是 p(x|θ) ,为了求出分布函数的参数 θ ,我们假设如果这个 θ 对应的分布函数最大,那么此时的分布函数就是这组数据的真实分布。这有种从结果推测原因的感觉。 p(x|θ) 中的 θ 是原因,是x符合的分布,因此我们采样数据才能够得到{ x1,x2,...,xm }。但是现在我们为了推测 θ ,反而从观测数据开始反推。
极大似然估计算法推测
θ
,
但是对于比较复杂的模型,参数比较多,很难直接通过计算求出极大似然函数。所以就有了EM算法,通过迭代的方式,不断逼近极大似然函数。
EM算法的核心公式:
上面的推导中,用到了Jensen不等式,因为log函数是个凹函数。取等条件是 p(x(i),z(i);θ)Q(z(i)i) 为常数(关于 θ )。
所以,取
那么,我们现在可以通过改变 Q(z(i)i) 的取值,来逼近极大似然函数。而且我们知道,当 Q(z(i)i)=p(z(i)|x(i);θ) 的时候, l(θ) 可以取得最大值。
至此,EM算法的思路已经很清晰了:
repeat until converge{
(E step) 求出每个样本数据对应的函数
(M step) 求出极大似然估计参数
θ
}
直观地理解上面的算法流程,在每次的迭代更新中,算法都会将样本数据代入到当前的模型中,进行计算。然后利用计算的结果更新模型。在下一次的迭代中,因为模型被更新过了,所以在E step中利用样本数据进行计算的结果也会发生变化。
可以证明,在不断的迭代中,计算结果总是朝着 θ 越来越接近极大似然的方向进行的(只需要证明第t+1次迭代后的似然函数比第t次迭代后的似然函数大,就可以了,即 l(t+1)≥l(t) )。那么,循环很多次之后,计算结果也就非常接近真实情况啦!
利用EM算法,推测GMM模型的参数
未完,待续。。。