2d高斯函数 拟合 python 高斯拟合程序_高斯-赛得尔迭代式 c++


接前文。

6. 高斯混合模型的EM算法

前文讲到,不完全数据集


的对数似然函数


的极大似然估计得到参数:



其中,响应度




虽然(1)式不是闭式解,但是我们可以根据(1)式,通过迭代的方法来计算参数



EM算法(Expectation-Maximization algorithm)是就是这样一种用于计算含有隐变量的模型的极大似然解的强大方法。

下面简述用EM算法来计算高斯混合模型参数的步骤:

1. 初始化:给参数均值向量


,协方差矩阵


和混合系数


赋初值;并计算对数似然函数的初值;


* 注:可以用K均值聚类(K-means clustering)算法来得到初始参数。

2. E步(Expectation step):用当前参数值


计算后验概率(响应度)




3. M步(Maximization step):用当前响应度


,根据(1)式重新估计参数:



其中,



在M步中,先计算


的值,然后用


来计算新的协方差矩阵



4. 用新的参数


计算对数似然函数:



然后检查是否收敛。(当然,也可直接检查参数是否收敛。)

如果收敛,则得到了模型参数;如果还没收敛,则返回第2步继续迭代。

参考文献[1], Section9.2, Page437指出,E步+M步可以保证对数似然函数的上升。不过需要注意的是,作为一种迭代算法,EM算法有可能收敛到局部最大值(local maximum)。

7. 换个角度看高斯混合模型的EM算法

在前面的极大似然估计中,我们的目标函数是不完全数据集


的对数似然函数



现在我们换个角度来看:假如我们也有隐变量的观测值


,即知道


来自高斯混合中的哪一个分模型,换句话说,我们有完全数据集


,那么我们可以计算完全数据的对数似然函数



首先,一组完全数据


的似然函数为:



所以,整个完全数据集


的似然函数为:



(当然,我们假设每组数据相互独立。)

取对数得



可以看出,和不完全数据的对数似然函数


相比,(2)式中



换了顺序。


然而实际情况是,我们并不知道隐变量的观测值,即(2)式中的


,所以我们无法直接计算


。因此,我们考虑对


在隐变量


的后验分布下求期望,利用求期望的过程,将


消掉。


在隐变量


的后验分布下的期望:



其中,


表示


在后验分布下的期望


。因


,所以



也就是说,期望


就是响应度


。进而,



将上式简记为


,现在将


当作常数,求参数


,使


最大化,即



采用拉格朗日乘子法,拉格朗日函数为:



先对


求梯度,因为



所以,



进而,



同之前极大化


一样,可推得



然后是对


求梯度,



回忆在文(一)中,我们求


的极值点时,有



对比(3)(4)两式,结合响应度


的公式,可发现两式是一致的,这意味着两种方法计算出的


也相同。


再来看




对比前文,可以发现


也和


极值点的参数一致。


综上,通过极大化


得到的模型参数,和


的极大似然估计结果是一致的。在EM算法的每一次迭代中,我们都在对


求极大值。


这给了我们另一个角度来看EM算法在高斯混合模型中的应用,也有助于我们理解EM算法的一般形式。

8. EM算法的一般形式

对于含有隐变量的概率模型,记变量和(离散的)隐变量分别为


,模型参数为


,(比如高斯混合模型的参数


),


为变量



个观测值的集合,即不完全数据集,


为相应的隐变量值的集合。


要计算


极大化对数似然函数


,EM算法的思路是:考虑完全数据集


的对数似然函数


在隐变量的后验分布


下的期望,反复迭代极大化这个期望,最终得到模型的参数值。其中


为当前参数。(若


相互独立,则计算


实际上是计算


)


下面简述EM算法的一般形式:

1. 初始化模型参数



2. E步(Expectation step):计算隐变量的后验分布



* 对于高斯混合模型,这一步实际上就是计算响应度



3. M步(Maximization step):极大化完全数据的对数似然函数


在隐变量的后验分布


下的期望,即极大化函数:



得到相应的参数值



4. 检查对数似然函数或参数是否收敛,如果没收敛,则