长期以来收益各位csdn大神的博客良多,今天起开始尝试学习他们用博客记录自己的一些学习和coding经历,算是一个备份,以后忘了好补回来。
今天又把EM算法求解GMM过了一遍,讲下理解的大致过程:
目的:求关于一堆样本的GMM,但是GMM相关的参数信息也不知道,只知道高斯的个数k,剩下的就是这么一堆单纯的训练样本向量;(比如,高斯是128个,样本是N多个SIFT,可以是原始的也可以是降维的)
那么,EM算法的第一步是初始化:需要初始化的参数有三类,Wi,MUi,SIGMAi,分别代表每个高斯的权重(或者说是概率)、均值和方差。对于单个高斯Zi来说,Wi是标量,另外两个是向量,和向量空间的维度一致。初始化的方法可以随机初始化,比较好的方法可以是先对样本做一个K-means,同样得到k个类,然后就可以根据训练的结果得到初始化的每个Wi,MUi,SIGMAi,初始化的Wi=当前K-means这个类i所包含的样本个数/样本总数,MUi=这个类i的均值,SIGMAi=这个类i的方差;
然后,就是EM算法了,下面直接参考自:http://www.cnblogs.com/zhangchaoyang/articles/2624882.html
PS:下面的π和我说的权重W是一回事,u和均值MU是一回事,Σ和方差SIGMA是一回事,k等价于我所说的i
E-Step E就是Expectation的意思,就是假设模型参数已知的情况下求隐含变量Z分别取z1,z2,...的期望,亦即Z分别取z1,z2,...的概率。在GMM中就是求数据点由各个 component生成的概率。
注意到我们在Z的后验概率前面乘以了一个权值因子αk,它表示在训练集中数据点属于类别zk的频率,在GMM中它就是πk。
M-Step M就是Maximization的意思,就是用最大似然的方法求出模型参数。现在我们认为上一步求出的r(i,k)就是“数据点xi由component k生成的概率”。根据公式(3),(4),(5)可以推出:




显然上面的参数都是可计算的,于是W、MU和SIGMA就被更新了,然后又可以执行E-step了,然后接着执行M-step,周而复始,直到对数似然函数的值收敛。其中GMM的log-likelihood function是
这是由GMM的概率模型取log得到的。
几个相关的参考文献:
这个很好理解,看了基本就懂了,重要
http://www.cnblogs.com/zhangchaoyang/articles/2624882.html
正确性的推导等blablabla的,最后那个男生女生的例子非常直观
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
简单理解和说明
http://blog.youkuaiyun.com/abcjennifer/article/details/8198352