提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加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)znk

p(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πzkk

p(\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)zk

p(\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)]znk

p(\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=0

N_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+λ=0

N+\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》

帮助理解:

p=39">http://blog.pluskid.org/?p=39

$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('

    ').addClass('pre-numbering').hide();
    $(this).addClass('has-numbering').parent().append($numbering);
    for (i = 1; i ').text(i));
    };
    $numbering.fadeIn(1700);
    });
    });

GMM高斯混合模型学习笔记(EM算法求解)的更多相关文章

  1. 学习笔记——EM算法

    EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(expectation):M步,求 ...

  2. 高斯混合模型参数估计的EM算法

    # coding:utf-8 import numpy as np def qq(y,alpha,mu,sigma,K,gama):#计算Q函数 gsum=[] n=len(y) for k in r ...

  3. GMM高斯混合模型 学习(2)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHpxMjAwODExMjExMDc=/font/5a6L5L2T/fontsize/400/fill/I0 ...

  4. EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  5. 斯坦福大学机器学习,EM算法求解高斯混合模型

    斯坦福大学机器学习,EM算法求解高斯混合模型.一种高斯混合模型算法的改进方法---将聚类算法与传统高斯混合模型结合起来的建模方法, 并同时提出的运用距离加权的矢量量化方法获取初始值,并采用衡量相似度的 ...

  6. [ML学习笔记] XGBoost算法

    [ML学习笔记] XGBoost算法 回归树 决策树可用于分类和回归,分类的结果是离散值(类别),回归的结果是连续值(数值),但本质都是特征(feature)到结果/标签(label)之间的映射. 这 ...

  7. 机器学习笔记—EM 算法

    EM 算法所面对的问题跟之前的不一样,要复杂一些. EM 算法所用的概率模型,既含有观测变量,又含有隐变量.如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法来估计 ...

  8. 学习笔记 - Manacher算法

    Manacher算法 - 学习笔记 是从最近Codeforces的一场比赛了解到这个算法的~ 非常新奇,毕竟是第一次听说 \(O(n)\) 的回文串算法 我在 vjudge 上开了一个[练习],有兴趣 ...

  9. K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

    1. 聚类算法都是无监督学习吗? 什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组.给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组.理论上,同一组中的数据点应该具有相似 ...

随机推荐

  1. 为什么出现Wide character in print at a14.pl line 41

    [root@wx03 ~]# cat a14.pl use Net::SMTP; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Headers; u ...

  2. VS2008+Qt 项目目录

    1.项目开发环境:VS2008,QT4.7 2.项目的目录: 1)PETCT是解决方案名字 2)Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,区分Release和Debug两个版本. ...

  3. 【milonga】什么意思_英语milonga在线翻译_有道词典

    [milonga]什么意思_英语milonga在线翻译_有道词典 milonga 网络释义英英释义   米隆加 本届探戈艺术节表演最受观众欢迎的是热情欢快的米隆加(Milonga)舞曲探戈,为了吸引年 ...

  4. CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器

    CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器 http://write.blog.csdn.net/postedit/10911105#本系列文章由ex_net(张建波)编写, ...

  5. 24篇HTTP博客

    http://www.cppblog.com/woaidongmao/category/11721.html

  6. 融云(找到“每个App都有沟通的需求”的细分市场)

    近日,国内著名App驾考宝典和融云达成合作,为应用增加IM功能,实现亿级用户之间聊天.消息一出,IM(即时通讯)领域的大佬,同时也是个上线不到两岁的新生力量,再次引发了行业的关注. 对业内人士而言,即 ...

  7. 安装bower

    1.前提事先安装好node 和 npm D:\DEVELOP\HTML>node -v v0.10.29 D:\DEVELOP\HTML>npm -v 1.4.14 2.安装bower n ...

  8. android launcher开发之图标背景以及默认配置

    1:然后我自己看了一下桌面图标的载入过程: 桌面第一次载入时是默认读取一个xml配置文件,完毕配置工作.这个配置文件在Launcher文件夹下, 路径是:\Launcher\res\xml\defau ...

  9. [Java Performance] 数据库性能最佳实践 - JPA缓存

    JPA缓存(JPA Caching) JPA有两种类型的缓存: EntityManager自身就是一种缓存.事务中从数据库获取的和写入到数据库的数据会被缓存(什么样的数据会被缓存.在后面有介绍).在一 ...

  10. Java中的throw和throws的差别

    Java中的throw和throws的差别 1.throwkeyword用于方法体内部.而throwskeyword用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常 ...