提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加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. ASP.NET利用byte检测上传图片安全

    ) { //这里只测试上传第一张图片file[0] HttpPostedFile file0 = Request.Files[]; //转换成byte,读取图片MIME类型 Stream stream ...

  2. Coin Toss

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31329#problem/G 使用二维数组f[ i ] [ j  ] 表示前i 位中有j个 ...

  3. 学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现

    基数排序称为卡片分类,这是一个比较早的时间越多,排名方法. 现代计算机出现之前,它已被用于排序老式打孔卡. 说下基数排序的思想.前面我有写一个桶式排序,基数排序的思想是桶式排序的推广. 桶式排序:ht ...

  4. linux shell种类

    1.shell 种类 目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 ...

  5. 南京三星面试准备3--数组&基础数据结构

    1.用递归颠倒一个栈. void PushToBottom(stack<int> &mystack,int num) { if(mystack.size()==0) { mysta ...

  6. oracle批量插入数据

    有一次开发一个功能,须要导入别人提供的几万条数据, 数据在一个*.sql文件里,大概有8万条数据 insert into testtable(id,name) values(1,'1')   ---- ...

  7. Get Cordova Ready for Grunt and CoffeeScript

    Cordova, Grunt and Coffee You may reference to below if you deside to work with coffee instead of Ja ...

  8. Logistic Regression(逻辑回归)(一)基本原理

    (整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 虽然叫做“回归”,但是这个算法是用来解决分类问题的.回归与分类的区 ...

  9. Windows下用Mingw编译Boost.Regex库

    下载Boost库,解压. 定位到regex库文件夹下. GCC所对应的MAKEFILE为gcc.mak 进入命令提示符下,输入make -f gcc.mak 这是如果直接按回车执行的话,会出现错误: ...

  10. appium 真机测试问题 出现 instruments crashed on startup

    1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...