混合高斯模型Gaussian Mixture Model(GMM)的EM(Expectation Maxium)求解代码

本文介绍了高斯混合模型(GMM)的基本概念及其在描述复杂数据分布中的应用,并详细阐述了如何使用期望最大化(EM)算法来求解GMM中的参数估计问题。

原帖请见:http://www.matrixq.net/2011/09/10218.html

与GMM有关的matlab和c代码可以参见:

(matlab+c)https://engineering.purdue.edu/~bouman/software/cluster/

(matlab toolbox)http://www.kostaskyriakoulis.com/gmmgui.html

(matlab)http://blog.pluskid.org/?p=39

(matlab)http://www.cnblogs.com/cfantaisie/archive/2011/08/20/2147075.html

高斯分布有很多重要的性质,但是用它来描述现实中的数据的话,它还是有很多局限的。如果将这些简单的分布线性组合,就可以更好的描述实际数据的性质了,这样的模型便被称为混合模型。最常用和最流行的混合模型就是高斯混合模型GMM(Gaussian Mixture Model )。如果用足够多的高斯分布,调整其期望和协方差矩阵,以及线性组合的系数,就可以精确的表述任何连续分布。

1). 有K个高斯分布的高斯混合模型,可以表示为:

(1) \begin{equation*} p(x)=\sum_{k=1}^{K}\pi_k \mathcal{N}(x | u_k, \Sigma_k) \end{equation*}

其中每个高斯分布\mathcal{N}(x | u_k, \Sigma_k)被称为一个component,参数\pi_k被称为混合系数,为了计算和分析的方便\pi_k通常被正则化为:

(2) \begin{equation*} \sum_{k=1}^K \pi_k = 1 \end{equation*}

如果把\pi_k=p(k)看做是能取到第k个component的先验概率,\matchcal{N}(x | u_k, \Sigma_k)=p(x|k)看做是第k个component中发生x的条件概率,那么根据贝叶斯定理,发生x之后,推断其属于第k个component的后验概率为:

(3) \begin{equation*} \gamma_k(x) \equiv p(k|x) =\frac{p(k)p(x|k)}{\sum_l p(l) p(x|l)} \end{equation*}

2) 高斯混合模型的最大似然
想要确定p(X|\pi,u,\sigma)中的参数\pi_k u_k \sigma_k,很容易想到用最大似然法。

(4) \begin{equation*} \begin{split} \ln p(X|\pi,u,\sigma) &= \ln \prod_{i=1}^{N}p(x_i)\\ &=\sum_{i=1}^{N} \ln \p(x_i) \\ &= \sum_{i=1}^{N} \ln \sum_{k=1}^{K}\pi_k \mathcal{N}(x_n|u_k,\Sigma_k) \end{split} \end{equation*}

但是这个log likelihood方程并不是很好解,因为需要在对数里面求和。于是一个优雅而强大的解决此问题的方法诞生了:期望最大化法EM(Expectation-Maximization)

3) 用EM法求高斯混合模型的参数
3.1)首先求解u_k。把\ln p(X|\pi,u,\Sigma)看做是u_k的方程,令式(4)的导数等于0,可得:

(5) \begin{equation*} 0=-\sum_{n=1}^{N}\underbrace{ \frac{\pi_k \mathcal{N}(x_n | u_k,\sigma_k) }{\sum_j \pi_j \mathcal{N}(x_n | u_j, \sigma_j)}}_{\gamma (z_{nk})} \Sigma_{k} (x_n-u_k) \end{equation*}

两边同乘以\Sigma_k^{-1},可得:

(6) \begin{equation*} u_k = \frac{1}{N_k}\sum \gamma (z_{nk})x_n \end{equation*}

其中N_k=\sum \gamma (z_{nk})

3.2) 同理将\ln p(X|\pi,u,\Sigma)看做是\Sigma_k的方程,令式(4)的导数等于0

(7) \begin{equation*} \Sigma_k=\frac{1}{N_k}\sum \gamma(z_nk)(x_n-u_k)(x_n-u_k)^T \end{equation*}

3.3) 求\pi_k. 将\ln p(X|\pi,u,\Sigma)看做是\pi_k的方程,由于\sum_{k=1}^{K}\pi_k=1,在这里引入拉格朗日乘子,令
\ln p(X|\pi,u,\Sigma)+\lambda(\sum_{k=1}^{K}-1)的导数等于0,可得

(8) \begin{equation*} 0=\sum_{n=1}^{N} \frac{\pi_k \mathcal{N}(x_n | u_k,\sigma_k) } {\sum_j \pi_j \mathcal{N}(x_n | u_j, \sigma_j)} + \lambda \end{equation*}

两边同乘以\pi_k,且令\lambda=-N,可得

(9) \begin{equation*} \pi_k = \frac{N_k}{N} \end{equation*}

然后有了式(6)(7)(9),并不能直接求出这些参数,因为\gamma(z_{nk})中同时包含这些未知量,这就引导我们通过一种迭代的方式来求解,这就是期望最大法。首先设定一些u_k,\Sigma_k,\pi_k的初始值,然后通过迭代不断的更新这些值,直到收敛。

高斯混合模型的的最大期望法

1. 选择期望u_k,协方差矩阵\Sigma_k,混合系数\pi_k的初始值,可以任意,但是通常可以先经过k-means得到一个较为理想的初始值,可以有效的减少迭代次数。
2. E step。计算每个变量属于哪个component的后验概率。

(10) \begin{equation*} \gamma (z_{nk}) =\frac{p(k)p(x|k)}{\sum_l p(l) p(x|l)} \end{equation*}

3. M step。根据计算的后验概率,计算每个component的参数:

(11) \begin{equation*} u_k^{new} = \frac{1}{N_k}\sum \gamma(z_{nk})x_n \end{equation*}

(12) \begin{equation*} \Sigma_k^{new}=\frac{1}{N_k}\sum \gamma(z_nk)(x_n-u_k^{new})(x_n-u_k^{new})^T \end{equation*}

(13) \begin{equation*} \pi_k^{new} = \frac{N_k}{N} \end{equation*}

4. 检查似然函数

(14) \begin{equation*} \ln p(X|\pi,u,\sigma) = \sum_{i=1}^{N} \ln \sum_{k=1}^{K}\pi_k \mathcal{N}(x_n|u_k,\Sigma_k) \end{equation*}

是否收敛,如果不是重复第二步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值