GMM高斯混合模型学习笔记(EM算法求解)
2016-01-07 21:33
316 查看
提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布。所以我们觉得不论什么样本分布都能够用混合模型来建模。由于高斯函数具有一些非常有用的性质。所以高斯混合模型被广泛地使用。
GMM与kmeans相似,也是属于clustering,不同的是。kmeans是把每一个样本点聚到当中一个cluster,而GMM是给出这些样本点到每一个cluster的概率。每一个component就是一个聚类中心。
GMM(Gaussian Mixture Model)高斯混合模型,由K个不同的Gaussian线性组合而成,每一个Gaussian是混合模型的一个component,GMM的概率密度函数例如以下:
p(x)=∑k=1Kp(k)(x|k)=∑k=1Kπk(x|μk,∑k)p(x)=\sum_{k=1}^Kp(k)(x|k) =\sum_{k=1}^K\pi_k\mathcal N(x|\mu_k,\sum_k)
依据上式。从GMM中生成一个样本点x分两步:
1,从K个component中随机的选择一个
2。从该component中选择一个点
參数说明:N个样本点。K个component,μk,∑k\mu_k,\sum_k 是第k个component的均值和协方差矩阵,是模型參数,是须要预计的。
πk\pi_k是mixing coefficient,表示第k个component被选中的概率。πk=1N∑Nn=1znk\pi_k=\frac{1}{N}\sum_{n=1}^N\mathbf z_{nk},也是模型參数。须要预计。N是高斯(正态)分布。
对一个样本集建立高斯混合模型的过程,就是依据已知样本集X反推高斯混合模型的參数(μ,∑,π\mu,\sum,\pi),这是一个參数预计问题。首先想到用最大似然的方法求解,也就是,要确定參数π,μ,∑\pi,\mu,\sum使得它所确定的概率分布生成这些样本点的概率最大。这个概率也就是似然函数,例如以下:
p(x)=∏n=1Np(xi)p(x)=\prod_{n=1}^Np(x_i)
而一般对于单个样本点其概率较小。多个相乘后更小,easy造成浮点数下溢,所以通常是对似然函数求log,变成加和形式:
∑i=1Nlnp(xi)\sum_{i=1}^Nlnp(x_i)
这个叫做log似然函数,目标是要最大化它。用log似然函数对參数分别求偏导。令偏导等于0,可求解得參数。
然而。GMM的log似然函数是例如以下形式:
lnp(X)=∑i=1Nln[∑k=1Kπk(xi|μk,∑k)]lnp(X)=\sum_{i=1}^Nln[\sum_{k=1}^K\pi_k\mathcal N(x_i|\mu_k,\sum_k)]
能够看到对数中有求和,直接求导求解将导致一系列复杂的运算,故考虑使用EM算法。(详细思路见上一篇:EM算法学习笔记)
考虑GMM生成一个样本点的过程,这里对每一个xi\mathbf x_i引入隐变量z,z是一个K维向量,如果生成xi\mathbf x_i时选择了第k个component,则zk=1\mathbf z_k=1,其它元素都为0。∑Kk=1zk=1\sum_{k=1}^K\mathbf z_k=1.
如果z是已知的。则样本集变成了{X,Z},要求解的似然函数变成了:
p(X,Z|μ,∑,π)=∏n=1N∏k=1Kπznkk(xn|μk,∑k)znkp(X,Z|\mu,\sum,\pi)=\prod_{n=1}^N\prod_{k=1}^K\pi_k^{z_{nk}}\mathcal N(\mathbf x_n|\mu_k,\sum_k)^{z_{nk}}
log似然函数为:
lnp(X,Z|μ,∑,π)=∑n=1N∑k=1Kznk[lnπk+ln(xn|μk,∑k)].(∗)lnp(X,Z|\mu,\sum,\pi)=\sum_{n=1}^N\sum_{k=1}^K\mathbf z_{nk}[ln\pi_k + ln\mathcal N(\mathbf x_n|\mu_k,\sum_k)].(*)
能够看到,这次ln直接对Gaussian作用,求和在ln外面,所以能够直接求最大似然解了。
1,初始化一组模型參数π,μ,∑\pi,\mu,\sum
2,E-step
然而。其实z是不知道的。我们仅仅是如果z已知。
而z的值是通过后验概率观測。所以这里考虑用z值的期望在上述似然函数中取代z。
对于一个样本点x\mathbf x:
p(z)=∏k=1Kπzkkp(\mathbf z)=\prod_{k=1}^K\pi_k^{z_k}
p(x|zk=1)=(x|μk,∑k)p(\mathbf x|\mathbf z_k=1)=\mathcal N(x|\mu_k,\sum_k)
p(x|z)=∏k=1K(x|μk,∑k)zkp(\mathbf x|\mathbf z)=\prod_{k=1}^K\mathcal N(\mathbf x|\mu_k,\sum_k)^{z_k}
p(x)=∑zp(z)p(x|z)=∑k=1Kπk(x|μk,∑k)p(\mathbf x)=\sum_zp(\mathbf z)p(\mathbf x|\mathbf z)=\sum_{k=1}^K\pi_k\mathcal N(\mathbf x|\mu_k,\sum_k)
后验概率(固定μ,∑,π\mu,\sum,\pi):
p(z|x,μ,∑,π)=p(x|z)p(z)p(x)正比于∏n=1N∏k=1K[πk(xn|μk,∑k)]znkp(\mathbf z|\mathbf x,\mu,\sum,\pi)=\frac{p(\mathbf x|\mathbf z)p(\mathbf z)}{p(\mathbf x)}正比于\prod_{n=1}^N\prod_{k=1}^K[{\pi_k\mathcal N(x_n|\mu_k,\sum_k)}]^{z_{nk}}
由于{zn\mathbf z_n}之间是相互独立的。
计算z期望γ(znk)\gamma(\mathbf z_{nk})(z向量仅仅有一个值取1,其余为0):
γ(znk)=E[znk]=0∗p(znk=0|xn)+1∗p(znk=1|xn)=p(znk=1|xn)=p(znk=1)p(xn|znk=1)p(xn)=πk(x|μk,∑k)∑Kj=1πj(x|μj,∑j).\gamma(\mathbf z_{nk})=E[\mathbf z_{nk}]=0*p(\mathbf z_{nk}=0|\mathbf x_n)+1*p(\mathbf z_{nk}=1|\mathbf x_n)=p(\mathbf z_{nk}=1|\mathbf x_n)=\frac{p(\mathbf z_{nk}=1)p(\mathbf x_n|\mathbf z_{nk}=1)}{p(\mathbf x_n)}=\frac{\pi_k\mathcal N(\mathbf x|\mu_k,\sum_k)}{\sum_{j=1}^K\pi_j\mathcal N(\mathbf x|\mu_j,\sum_j)}.
将z值用期望取代。则待求解的log似然函数(*)式变为:
Ez[lnp(X,Z|μ,∑,π)]=∑n=1N∑k=1Kγ(znk)[lnπk+ln(xn|μk,∑k)].E_z[lnp(X,Z|\mu,\sum,\pi)]=\sum_{n=1}^N\sum_{k=1}^K\gamma (\mathbf z_{nk})[ln\pi_k + ln\mathcal N(\mathbf x_n|\mu_k,\sum_k)].
3,M-step
如今能够最大化似然函数求解參数了,首先对μ\mu求偏导,令偏导等于0。可得:
∑n=1N∑k=1Kγ(znk)∑k(xn−μk)=0\sum_{n=1}^N\sum_{k=1}^K\gamma (\mathbf z_{nk})\sum_k(\mathbf x_n-\mu_k)=0
μk=1Nk∑n=1Nγ(znk)xn,其中Nk=∑n=1Nγ(znk).\mu_k=\frac{1}{N_k}\sum_{n=1}^N\gamma (\mathbf z_{nk}){\mathbf x_n},当中N_k=\sum_{n=1}^N\gamma (\mathbf z_{nk}).
NkN_k 是“the effective number of points assigned to cluster k”.
再对∑k\sum_k求偏导,令偏导等于0,可得:
∑k=1Nk∑n=1Nγ(znk)(xn−μk)(xn−μk)T\sum_k=\frac{1}{N_k}\sum_{n=1}^N\gamma (\mathbf z_{nk})(\mathbf x_n-\mu_k)(\mathbf x_n-\mu_k)^T
接下来还需求解π\pi。注意到π\pi需满足∑Kk=1πk=1\sum_{k=1}^K\pi_k=1。所以这是一个带等式约束的最大值问题。使用拉格朗日乘数法。
构造拉格朗日函数:
L=lnp(X|π,μ,∑)+λ(∑k=1Kπk−1).L=lnp(X|\pi,\mu,\sum)+\lambda(\sum_{k=1}^K\pi_k-1).
对π\pi求导,令导数为0:
∑n=1N(x|μk,∑k)∑Kj=1πj(x|μj,∑j)+λ=0\sum_{n=1}^N\frac{\mathcal N(\mathbf x|\mu_k,\sum_k)}{\sum_{j=1}^K\pi_j\mathcal N(\mathbf x|\mu_j,\sum_j)}+\lambda=0
两边同乘πk\pi_k得:
∑n=1Nγ(znk)+λπk=0\sum_{n=1}^N\gamma (\mathbf z_{nk}) + \lambda\pi_k=0
Nk+λπk=0N_k+\lambda\pi_k=0
两边对k求和:
∑k=1KNk+∑k=1Kλπk=0\sum_{k=1}^KN_k+\sum_{k=1}^K\lambda\pi_k=0
N+λ=0N+\lambda=0
可得:λ=−N\lambda=-N
代入可得:πk=NkN.\pi_k=\frac{N_k}{N}.
4,检查是否收敛
反复E-step和M-step两步。直到收敛,就可以求得一个局部最优解。
GMM的建模步骤例如以下图(k=2,高斯分布是蓝色和红色圈):
主要參考资料:
《Pattern Recognization and Machine Learning》
帮助理解:
http://blog.pluskid.org/?p=39
GMM与kmeans相似,也是属于clustering,不同的是。kmeans是把每一个样本点聚到当中一个cluster,而GMM是给出这些样本点到每一个cluster的概率。每一个component就是一个聚类中心。
GMM(Gaussian Mixture Model)高斯混合模型,由K个不同的Gaussian线性组合而成,每一个Gaussian是混合模型的一个component,GMM的概率密度函数例如以下:
p(x)=∑k=1Kp(k)(x|k)=∑k=1Kπk(x|μk,∑k)p(x)=\sum_{k=1}^Kp(k)(x|k) =\sum_{k=1}^K\pi_k\mathcal N(x|\mu_k,\sum_k)
依据上式。从GMM中生成一个样本点x分两步:
1,从K个component中随机的选择一个
2。从该component中选择一个点
參数说明:N个样本点。K个component,μk,∑k\mu_k,\sum_k 是第k个component的均值和协方差矩阵,是模型參数,是须要预计的。
πk\pi_k是mixing coefficient,表示第k个component被选中的概率。πk=1N∑Nn=1znk\pi_k=\frac{1}{N}\sum_{n=1}^N\mathbf z_{nk},也是模型參数。须要预计。N是高斯(正态)分布。
对一个样本集建立高斯混合模型的过程,就是依据已知样本集X反推高斯混合模型的參数(μ,∑,π\mu,\sum,\pi),这是一个參数预计问题。首先想到用最大似然的方法求解,也就是,要确定參数π,μ,∑\pi,\mu,\sum使得它所确定的概率分布生成这些样本点的概率最大。这个概率也就是似然函数,例如以下:
p(x)=∏n=1Np(xi)p(x)=\prod_{n=1}^Np(x_i)
而一般对于单个样本点其概率较小。多个相乘后更小,easy造成浮点数下溢,所以通常是对似然函数求log,变成加和形式:
∑i=1Nlnp(xi)\sum_{i=1}^Nlnp(x_i)
这个叫做log似然函数,目标是要最大化它。用log似然函数对參数分别求偏导。令偏导等于0,可求解得參数。
然而。GMM的log似然函数是例如以下形式:
lnp(X)=∑i=1Nln[∑k=1Kπk(xi|μk,∑k)]lnp(X)=\sum_{i=1}^Nln[\sum_{k=1}^K\pi_k\mathcal N(x_i|\mu_k,\sum_k)]
能够看到对数中有求和,直接求导求解将导致一系列复杂的运算,故考虑使用EM算法。(详细思路见上一篇:EM算法学习笔记)
考虑GMM生成一个样本点的过程,这里对每一个xi\mathbf x_i引入隐变量z,z是一个K维向量,如果生成xi\mathbf x_i时选择了第k个component,则zk=1\mathbf z_k=1,其它元素都为0。∑Kk=1zk=1\sum_{k=1}^K\mathbf z_k=1.
如果z是已知的。则样本集变成了{X,Z},要求解的似然函数变成了:
p(X,Z|μ,∑,π)=∏n=1N∏k=1Kπznkk(xn|μk,∑k)znkp(X,Z|\mu,\sum,\pi)=\prod_{n=1}^N\prod_{k=1}^K\pi_k^{z_{nk}}\mathcal N(\mathbf x_n|\mu_k,\sum_k)^{z_{nk}}
log似然函数为:
lnp(X,Z|μ,∑,π)=∑n=1N∑k=1Kznk[lnπk+ln(xn|μk,∑k)].(∗)lnp(X,Z|\mu,\sum,\pi)=\sum_{n=1}^N\sum_{k=1}^K\mathbf z_{nk}[ln\pi_k + ln\mathcal N(\mathbf x_n|\mu_k,\sum_k)].(*)
能够看到,这次ln直接对Gaussian作用,求和在ln外面,所以能够直接求最大似然解了。
1,初始化一组模型參数π,μ,∑\pi,\mu,\sum
2,E-step
然而。其实z是不知道的。我们仅仅是如果z已知。
而z的值是通过后验概率观測。所以这里考虑用z值的期望在上述似然函数中取代z。
对于一个样本点x\mathbf x:
p(z)=∏k=1Kπzkkp(\mathbf z)=\prod_{k=1}^K\pi_k^{z_k}
p(x|zk=1)=(x|μk,∑k)p(\mathbf x|\mathbf z_k=1)=\mathcal N(x|\mu_k,\sum_k)
p(x|z)=∏k=1K(x|μk,∑k)zkp(\mathbf x|\mathbf z)=\prod_{k=1}^K\mathcal N(\mathbf x|\mu_k,\sum_k)^{z_k}
p(x)=∑zp(z)p(x|z)=∑k=1Kπk(x|μk,∑k)p(\mathbf x)=\sum_zp(\mathbf z)p(\mathbf x|\mathbf z)=\sum_{k=1}^K\pi_k\mathcal N(\mathbf x|\mu_k,\sum_k)
后验概率(固定μ,∑,π\mu,\sum,\pi):
p(z|x,μ,∑,π)=p(x|z)p(z)p(x)正比于∏n=1N∏k=1K[πk(xn|μk,∑k)]znkp(\mathbf z|\mathbf x,\mu,\sum,\pi)=\frac{p(\mathbf x|\mathbf z)p(\mathbf z)}{p(\mathbf x)}正比于\prod_{n=1}^N\prod_{k=1}^K[{\pi_k\mathcal N(x_n|\mu_k,\sum_k)}]^{z_{nk}}
由于{zn\mathbf z_n}之间是相互独立的。
计算z期望γ(znk)\gamma(\mathbf z_{nk})(z向量仅仅有一个值取1,其余为0):
γ(znk)=E[znk]=0∗p(znk=0|xn)+1∗p(znk=1|xn)=p(znk=1|xn)=p(znk=1)p(xn|znk=1)p(xn)=πk(x|μk,∑k)∑Kj=1πj(x|μj,∑j).\gamma(\mathbf z_{nk})=E[\mathbf z_{nk}]=0*p(\mathbf z_{nk}=0|\mathbf x_n)+1*p(\mathbf z_{nk}=1|\mathbf x_n)=p(\mathbf z_{nk}=1|\mathbf x_n)=\frac{p(\mathbf z_{nk}=1)p(\mathbf x_n|\mathbf z_{nk}=1)}{p(\mathbf x_n)}=\frac{\pi_k\mathcal N(\mathbf x|\mu_k,\sum_k)}{\sum_{j=1}^K\pi_j\mathcal N(\mathbf x|\mu_j,\sum_j)}.
将z值用期望取代。则待求解的log似然函数(*)式变为:
Ez[lnp(X,Z|μ,∑,π)]=∑n=1N∑k=1Kγ(znk)[lnπk+ln(xn|μk,∑k)].E_z[lnp(X,Z|\mu,\sum,\pi)]=\sum_{n=1}^N\sum_{k=1}^K\gamma (\mathbf z_{nk})[ln\pi_k + ln\mathcal N(\mathbf x_n|\mu_k,\sum_k)].
3,M-step
如今能够最大化似然函数求解參数了,首先对μ\mu求偏导,令偏导等于0。可得:
∑n=1N∑k=1Kγ(znk)∑k(xn−μk)=0\sum_{n=1}^N\sum_{k=1}^K\gamma (\mathbf z_{nk})\sum_k(\mathbf x_n-\mu_k)=0
μk=1Nk∑n=1Nγ(znk)xn,其中Nk=∑n=1Nγ(znk).\mu_k=\frac{1}{N_k}\sum_{n=1}^N\gamma (\mathbf z_{nk}){\mathbf x_n},当中N_k=\sum_{n=1}^N\gamma (\mathbf z_{nk}).
NkN_k 是“the effective number of points assigned to cluster k”.
再对∑k\sum_k求偏导,令偏导等于0,可得:
∑k=1Nk∑n=1Nγ(znk)(xn−μk)(xn−μk)T\sum_k=\frac{1}{N_k}\sum_{n=1}^N\gamma (\mathbf z_{nk})(\mathbf x_n-\mu_k)(\mathbf x_n-\mu_k)^T
接下来还需求解π\pi。注意到π\pi需满足∑Kk=1πk=1\sum_{k=1}^K\pi_k=1。所以这是一个带等式约束的最大值问题。使用拉格朗日乘数法。
构造拉格朗日函数:
L=lnp(X|π,μ,∑)+λ(∑k=1Kπk−1).L=lnp(X|\pi,\mu,\sum)+\lambda(\sum_{k=1}^K\pi_k-1).
对π\pi求导,令导数为0:
∑n=1N(x|μk,∑k)∑Kj=1πj(x|μj,∑j)+λ=0\sum_{n=1}^N\frac{\mathcal N(\mathbf x|\mu_k,\sum_k)}{\sum_{j=1}^K\pi_j\mathcal N(\mathbf x|\mu_j,\sum_j)}+\lambda=0
两边同乘πk\pi_k得:
∑n=1Nγ(znk)+λπk=0\sum_{n=1}^N\gamma (\mathbf z_{nk}) + \lambda\pi_k=0
Nk+λπk=0N_k+\lambda\pi_k=0
两边对k求和:
∑k=1KNk+∑k=1Kλπk=0\sum_{k=1}^KN_k+\sum_{k=1}^K\lambda\pi_k=0
N+λ=0N+\lambda=0
可得:λ=−N\lambda=-N
代入可得:πk=NkN.\pi_k=\frac{N_k}{N}.
4,检查是否收敛
反复E-step和M-step两步。直到收敛,就可以求得一个局部最优解。
GMM的建模步骤例如以下图(k=2,高斯分布是蓝色和红色圈):
主要參考资料:
《Pattern Recognization and Machine Learning》
帮助理解:
http://blog.pluskid.org/?p=39
相关文章推荐
- 使用John the ripper工具来尝试破解Linux密码
- Daily Scrum – 1/7
- ubuntu下gcc编程入门
- css定位中绝对定位和相对定位的区别
- Syntax error on token "=", @ expected
- 测度论--长度是怎样炼成的[zz]
- robot framework 使用四:分层设计和截图以及注意事项
- 把Arch Linux安装到U盘上的具体教程
- nodejs安装不了和npm安装不了的解决方法
- GTK+2.0编程范例代码分析-第二章(2)
- Struts2全局异常 全局结果的配置
- String baseprice = request.getParameter("baseprice")==null相关问题
- iOS开发网络篇之文件下载、大文件下载、断点下载
- 吉布斯采样(Gibbs Sampling)及相关算法
- 提高篇 第12节-变量的存储类别
- Arch Linux安装后的一些初始设置简介
- HTML元素、标签、属性的区别
- Java中如何遍历Map对象的4种方法
- Struts2验证
- Java中的动态代理