您的位置:首页 > 其它

高斯混合模型(GMM)及其EM算法的理解

2017-03-02 18:43 411 查看

一个例子

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。

如图1,图中的点在我们看来明显分成两个聚类。这两个聚类中的点分别通过两个不同的正态分布随机生成而来。但是如果没有GMM,那么只能用一个的二维高斯分布来描述图1中的数据。图1中的椭圆即为二倍标准差的正态分布椭圆。这显然不太合理,毕竟肉眼一看就觉得应该把它们分成两类。



图1

这时候就可以使用GMM了!如图2,数据在平面上的空间分布和图1一样,这时使用两个二维高斯分布来描述图2中的数据,分别记为(μ1,Σ1)和(μ2,Σ2). 图中的两个椭圆分别是这两个高斯分布的二倍标准差椭圆。可以看到使用两个二维高斯分布来描述图中的数据显然更合理。实际上图中的两个聚类的中的点是通过两个不同的正态分布随机生成而来。如果将两个二维高斯分布(μ1,Σ1)和(μ2,Σ2)合成一个二维的分布,那么就可以用合成后的分布来描述图2中的所有点。最直观的方法就是对这两个二维高斯分布做线性组合,用线性组合后的分布来描述整个集合中的数据。这就是高斯混合模型(GMM)。



图2

高斯混合模型(GMM)

设有随机变量X,则混合高斯模型可以用下式表示:

p(x)=∑k=1Kπk(x|μk,Σk)

其中(x|μk,Σk)称为混合模型中的第k个分量(component)。如前面图2中的例子,有两个聚类,可以用两个二维高斯分布来表示,那么分量数K=2. πk是混合系数(mixture coefficient),且满足:

∑k=1Kπk=1

0≤πk≤1

可以看到πk相当于每个分量(x|μk,Σk)的权重。

GMM的应用

GMM常用于聚类。如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数πk ,选中 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为已知的问题。

将GMM用于聚类时,假设数据服从混合高斯分布(Mixture Gaussian Distribution),那么只要根据数据推出 GMM 的概率分布来就可以了;然后 GMM 的 K 个 Component 实际上对应K个 cluster 。根据数据来推算概率密度通常被称作 density estimation 。特别地,当我已知(或假定)概率密度函数的形式,而要估计其中的参数的过程被称作『参数估计』。

例如图2的例子,很明显有两个聚类,可以定义K=2. 那么对应的GMM形式如下:

p(x)=π1(x|μ1,Σ1)+π2(x|μ2,Σ2)

上式中未知的参数有六个:(π1,μ1,Σ1;π2,μ2,Σ2). 之前提到GMM聚类时分为两步,第一步是随机地在这K个分量中选一个,每个分量被选中的概率即为混合系数πk. 可以设定π1=π2=0.5,表示每个分量被选中的概率是0.5,即从中抽出一个点,这个点属于第一类的概率和第二类的概率各占一半。但实际应用中事先指定πk的值是很笨的做法,当问题一般化后,会出现一个问题:当从图2中的集合随机选取一个点,怎么知道这个点是来自N(x|μ1,Σ1)还是N(x|μ2,Σ2)呢?换言之怎么根据数据自动确定π1和π2的值?这就是GMM参数估计的问题。要解决这个问题,可以使用EM算法。通过EM算法,我们可以迭代计算出GMM中的参数:(πk,xk,Σk).

GMM参数估计过程

GMM的贝叶斯理解

在介绍GMM参数估计之前,我们先改写GMM的形式,改写之后的GMM模型可以方便地使用EM估计参数。GMM的原始形式如下:

p(x)=∑k=1Kπk(x|μk,Σk)(1)

前面提到πk可以看成是第k类被选中的概率。我们引入一个新的K维随机变量z. zk(1≤k≤K)只能取0或1两个值;zk=1表示第k类被选中的概率,即:p(zk=1)=πk;如果zk=0表示第k类没有被选中的概率。更数学化一点,zk要满足以下两个条件:

zk∈{0,1}

∑Kzk=1

例如图2中的例子,有两类,则z的维数是2. 如果从第一类中取出一个点,则z=(1,0);,如果从第二类中取出一个点,则z=(0,1).

zk=1的概率就是πk,假设zk之间是独立同分布的(iid),我们可以写出z的联合概率分布形式:

p(z)=p(z1)p(z2)...p(zK)=∏k=1Kπzkk(2)

因为zk只能取0或1,且z中只能有一个zk为1而其它zj(j≠k)全为0,所以上式是成立的。

图2中的数据可以分为两类,显然,每一類中的数据都是服从正态分布的。这个叙述可以用条件概率来表示:

p(x|zk=1)=(x|μk,Σk)

即第k类中的数据服从正态分布。进而上式有可以写成如下形式:

p(x|z)=∏k=1K(x|μk,Σk)zk(3)

上面分别给出了p(z)和p(x|z)的形式,根据条件概率公式,可以求出p(x)的形式:

p(x)=∑zp(z)p(x|z)=∑i=1Kπk(x|μk,Σk) (zk=0的项为1,省略)(4)

可以看到GMM模型的(1)式与(4)式有一样的形式,且(4)式中引入了一个新的变量z,通常称为隐含变量(latent variable)。对于图2中的数据,『隐含』的意义是:我们知道数据可以分成两类,但是随机抽取一个数据点,我们不知道这个数据点属于第一类还是第二类,它的归属我们观察不到,因此引入一个隐含变量z来描述这个现象。

注意到在贝叶斯的思想下,p(z)是先验概率, p(x|z)是似然概率,很自然我们会想到求出后验概率p(z|x):

γ(zk)=p(zk=1|x)=p(zk=1)p(x|zk=1)p(x,zk=1)=p(zk=1)p(x|zk=1)∑Kj=1p(zj=1)p(x|zj=1) (全概率公式)=πk(x|μk,Σk)∑Kj=1πj(x|μj,Σj) (结合(3)(4))(5)

上式中我们定义符号γ(zk)来表示来表示第k个分量的后验概率。在贝叶斯的观点下,πk可视为zk=1的先验概率。

上述内容改写了GMM的形式,并引入了隐含变量z和已知x后的的后验概率γ(zk),这样做是为了方便使用EM算法来估计GMM的参数。

EM算法估计GMM参数

EM算法(Expectation-Maximization algorithm)分两步,第一步先求出要估计参数的粗略值,第二步使用第一步的值最大化似然函数。因此要先求出GMM的似然函数。

假设x={x1,x2,...,xN},对于图2,x是图中所有点(每个点有在二维平面上有两个坐标,是二维向量,因此x1,x2等都用粗体表示)。GMM的概率模型如(1)式所示。GMM模型中有三个参数需要估计,分别是π,μ和Σ. 将(1)式稍微改写一下:

p(x|π,μ,Σ)=∑k=1Kπk(x|μk,Σk)(6)

为了估计这三个参数,需要分别求解出这三个参数的最大似然函数。先求解μk的最大似然函数。对(6)式取对数后再对μk求导并令导数为0即得到最大似然函数。

0=−∑n=1Nπk(xn|μk,Σk)∑jπj(xn|μj,Σj)Σk(xn−μk)(7)

注意到上式中分数的一项的形式正好是(5)式后验概率的形式。两边同乘Σ−1k,重新整理可以得到:

μk=1Nk∑n=1Nγ(znk)xn(8)

其中:

Nk=∑n=1Nγ(znk)(9)

(8)式和(9)式中,N表示点的数量。γ(znk)表示点n(xn)属于聚类k的后验概率。则Nk可以表示属于第k个聚类的点的数量。那么μk表示所有点的加权平均,每个点的权值是∑Nn=1γ(znk),跟第k个聚类有关。

同理求Σk的最大似然函数,可以得到:

Σk=1Nk∑n=1Nγ(znk)(xn−μk)(xn−μk)T(10)

最后剩下πk的最大似然函数。注意到πk有限制条件∑Kk=1πk=1,因此我们需要加入拉格朗日算子:

lnp(x|π,μ,Σ)+λ(∑k=1Kπk−1)

求上式关于πk的最大似然函数,得到:

0=∑n=1N(xn|μk,Σk)∑jπj(xn|μj,Σj)+λ(11)

上式两边同乘πk,可以得到λ=−N,进而可以得到πk更简洁的表达式:

πk=NkN(12)

EM算法估计GMM参数即最大化(8),(10)和(12)。需要用到(5),(8),(10)和(12)四个公式。我们先指定π,μ和Σ的初始值,带入(5)中计算出γ(znk),然后再将γ(znk)带入(8),(10)和(12),求得πk,μk和Σk;接着用求得的πk,μk和Σk再带入(5)得到新的γ(znk),再将更新后的γ(znk)带入(8),(10)和(12),如此往复,直到算法收敛。

EM算法

定义分量数目K,对每个分量k设置πk,μk和Σk的初始值,然后计算(6)式的对数似然函数。

E step

根据当前的πk、μk、Σk计算后验概率γ(znk)

γ(znk)=πk(xn|μn,Σn)∑Kj=1πj(xn|μj,Σj)

M step

根据E step中计算的γ(znk)再计算新的πk、μk、Σk

μnewkΣnewkπnewk=1Nk∑n=1Nγ(znk)xn=1Nk∑n=1Nγ(znk)(xn−μnewk)(xn−μnewk)T=NkN

其中:

Nk=∑n=1Nγ(znk)

计算(6)式的对数似然函数

lnp(x|π,μ,Σ)=∑n=1Nln{∑k=1Kπk(xk|μk,Σk)}

检查参数是否收敛或对数似然函数是否收敛,若不收敛,则返回第2步。

Reference

漫谈 Clustering (3): Gaussian Mixture Model

Draw Gaussian distribution ellipse

Pang-Ning Tan 等, 数据挖掘导论(英文版), 机械工业出版社, 2010

Christopher M. Bishop etc., Pattern Recognition and Machine Learning, Springer, 2006
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息