先列明材料:
高斯混合模型的推导计算(英文版):
http://www.seanborman.com/publications/EM_algorithm.pdf
这位翻译写成中文版:
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
高斯混合模型的流程:
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html
最大似然估计:
http://blog.csdn.net/yanqingan/article/details/6125812
http://blog.csdn.net/abcjennifer/article/details/8198352
一个高斯混合模型(GMM) 包含多个一维的高斯分布(GM),按例子来说,如果班级上同学的性别是知道的,身高也是知道的,那么对班级同学构建的GMM 可以这样,GM 的个数取2,分别表示男生身高高斯分布和女生的身高高斯分布,首先通过男生女生来划分 单个 GM 的权重,即男生女生占班的比重,然后 男生的身高数据 计算出高斯分布,女生的也是,这样 就构建好一个GMM 了。
当然上面的例子是理想化的计算,假如对一组样本 n-by-d 进行聚类,n 表示样本数,d 表示样本的维度。
对一个GMM 的训练通过EM 和最大似然估计计算,需要确定的是 GMM 中各GM 的权重w,和各GM 里面样本均值 u 和 协方差矩阵 ∑ (d-by-d matrix),即GM 分布的两个参数。同属一个GM 的样本就是同一个类,所以多少类变有多少个GM.
通过最大似然估计作为GMM 训练的结束判断,最大似然估计根据 X 在GMM 分布中的期望作为判断(这句话不准确,看上面GMM推导).
对于一个样本点,其在GMM中的概率p(x)如下,其中K 为GM 的个数,样本x 在K 个GM 中的概率p(x|k) 的叠加,p(k)为 k-th GM 的权重:
然后利用最大似然估计,N 个样本点的p(x)之积最大的时候,则参数确定了,因为多项式之积难算,去了log 之后变成了之和,N() 是一维高斯分布,如下:
下面是另外一种表达,参考上上式中第一个等号,下面的m 等同上面的N,zi 是类标号即上面的k,下面公式第二等号有两个p,后p 等同于GM 的权重,前者p 就是一个上面公式的N ()一维高斯分布,注意下式第二个累加的变量是类标号,不是样本标号:
为了使上面的L 取最大值,那么使两个p 都取最大便可以了,这需要用到em算法,固定A,更新B,然后换过来,固定B,更新A,迭代到L的变化低于阀值。
初始化:
因为我们有初始化的标号,所以可以初始化各GM 的权重w(π),样本均值u 和协方差∑。初始化完成后,便可以进入EM迭代过程。
e-step:
先进行 e-step,这一步是假设知道了个GM 3个参数,即假设这个GMM 模型已经训练好了,那么将N个训练样本当作新样本输入,便可以求各样本到各GM 的概率,一个 N-by-K matrix,然后就知道了各样本的类标号,一行中的概率最大值咯,下面就是这个矩阵的计算公式:
注意的是这里运算的x 是d-by-1 矩阵,即一个sample,与前面的x 矩阵有点不同。
好了,问题来了,这个γ 究竟对应于上面公式的哪一部分呢?答案是 都不对应!
既然这样,为什么计算呢?为了更新类标号!
注意到这个γ 是小数来的,如果不进行上面的一行中概率最大值修改为1,其他修改为0,则一个sample 的类标号将是权重0.xx了,不再是1、0,正常操作时这样,在迭代过程中一直保持权重类标号,到正真需要的时候,例如判断样本的归宿时候,则给出1、0类标号。
ps:
注意到 γ 的分子是不是跟L 很像? 这其实实际计算上面,N() 是一样的,但π 不一样阿!这需要看e-step 的假设了,GMM 模型已经知道,输入的样本标号不知道,那么这个π 是训练数据得出来的π,不是输入样本的π(虽然数值数值上一样但逻辑上不同)!所以需要求出γ 才能够知道样本的标号,然后计算出GM 的权重,才是L 中的π值,想省事的就先判断后进行m-step,毕竟m-step才是意义上计算π的地方。
e-step结束了,其实我们已经可以知道了L 的右边的p,将γ 每行叠加生成 1-by-k 矩阵,便是各GM 的标号叠加,除以样本数便是权重了,进入m-step.
m-step:
进入M-step,则是看作已经到了输入样本的类标号,这就跟初始化很类似了,已知标号然后求GM的参数,区别是 初始化时候的标号为1、0,现在可能成小数了,计算公式如下:
解释下,第一条就是k-th GM 的样本均值,γ则是e-step 计算得出的值。
第二条是协方差计算公式了。
权重的更新藏在第三行,计算可以看上面几行有写。
收敛判断:
当前的log-likehood 就是用e-step 中的N(),和m-step 中的π,计算下式,与上一步的做对比。