一、概述
以一维数据为例,我们可以看到下图通过将多个单一的高斯模型加权叠加到一起就可以获得一个高斯混合模型,这个混合模型显然具备比单个高斯模型更强的拟合能力:

再举一个二维数据的例子,在下图中可以看到有两个数据密集区域,对应的概率分布也就会有两个峰。高斯混合模型可以看做生成模型,其数据生成过程可以认为先选择一个高斯分布,再从被选择的高斯分布中生成数据:

综合上述两种描述,我们可以从两种角度来描述高斯混合模型:
- 几何角度:加权平均
可以认为高斯混合模型是将多个高斯分布加权平均而成的模型:
p(x)=k=1∑KαkN(μk,Σk),k=1∑Kαk=1
- 混合模型(或者生成模型)角度
可以认为高斯混合模型是一种含有隐变量的生成模型:
x:observed variable
z:latent variable
z是隐变量,表示对应的样本x属于哪一个高斯分布,其概率分为如下表:
z |
C1 |
C2 |
⋯ |
Ck |
p |
p1 |
p2 |
⋯ |
pk |
可以认为这里的概率pk就是几何角度加权平均中权重,两种角度的解释其实是一个意思。
我们可以画出高斯混合模型的概率图:

实心点代表模型的参数,右下角的N代表样本个数。
二、尝试用极大似然估计来求解
X:observed data→X=(x1,x2,⋯,xN)
(X,Z):comlete data
θ:parameter→θ={p1,p2,⋯,pk,μ1,μ2,⋯,μk,Σ1,Σ2,⋯,Σk},∑i=1Kpk=1
以上为我们的数据以及需要求解的参数。接下来我们表示一下概率p(x):
p(x)=z∑p(x,z)=k=1∑Kp(x,z=Ck)=k=1∑Kp(z=Ck)⋅p(x∣z=Ck)=k=1∑Kpk⋅N(x∣μk,Σk)
然后我们使用极大似然估计法求解这个参数估计问题。首先告知结论:极大似然估计法无法求解含有隐变量的参数估计问题,或者说不能得到解析解。接下来来看为什么不能用极大似然估计法来求解:
θ^MLE=θargmaxlogp(X)=θargmaxlogi=1∏Np(xi)=θargmaxi=1∑Nlogp(xi)=θargmaxi=1∑Nlogk=1∑Kpk⋅N(xi∣μk,Σk)
极大似然估计法不能得到解析解的原因为log函数内部出现了求和符号。当然我们可以使用梯度下降法来进行求解,但是对于含有隐变量的模型来说使用EM算法是更为合适的。
三、使用EM算法求解
由于使用EM算法需要用到联合概率p(x,z)和后验p(z∣x),所有我们首先写出这两个概率的表示:
p(x,z)=p(z)p(x∣z)=pz⋅N(x∣μz,Σz)p(z∣x)=p(x)p(x,z)=∑k=1Kpk⋅N(x∣μk,Σk)pz⋅N(x∣μz,Σz)
- E step
Q(θ,θt)=Z∑logp(X,Z∣θ)⋅p(Z∣X,θt)=z1z2⋯zN∑logi=1∏Np(xi,zi∣θ)⋅i=1∏Np(zi∣xi,θt)=z1z2⋯zN∑i=1∑Nlogp(xi,zi∣θ)⋅i=1∏Np(zi∣xi,θt)=z1z2⋯zN∑[logp(x1,z1∣θ)+logp(x2,z2∣θ)+⋯+logp(xi,zi∣θ)]⋅i=1∏Np(zi∣xi,θt)
对于上式展开的每一项,我们可以进行化简:
z1z2⋯zN∑logp(x1,z1∣θ)i=1∏Np(zi∣xi,θt)=z1z2⋯zN∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)i=2∏Np(zi∣xi,θt)=z1∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)z2z3⋯zN∑i=2∏Np(zi∣xi,θt)=z1∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)z2z3⋯zN∑p(z2∣x2,θt)p(z3∣x3,θt)⋯p(zN∣xN,θt)=z1∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)=1z2∑p(z2∣x2,θt)=1z3∑p(z3∣x3,θt)⋯=1zN∑p(zN∣xN,θt)=z1∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)同样的我们可以得到z1z2⋯zN∑logp(x1,z1∣θ)i=1∏Np(zi∣xi,θt)=zi∑logp(xi,zi∣θ)p(zi∣xi,θt)
继续对Q(θ,θt)进行化简可以得到:
Q(θ,θt)=z1∑logp(x1,z1∣θ)⋅p(z1∣x1,θt)+⋯+zi∑logp(xi,zi∣θ)⋅p(zi∣xi,θt)=i=1∑Nzi∑logp(xi,zi∣θ)⋅p(zi∣xi,θt)=i=1∑Nzi∑log[pzi⋅N(xi∣μzi,Σzi)]⋅∑k=1Kpkt⋅N(xi∣μkt,Σkt)pzit⋅N(xi∣μzit,Σzit)(∑k=1Kpkt⋅N(xi∣μkt,Σkt)pzit⋅N(xi∣μzit,Σzit)与θ无关,暂时写作p(zi∣xi,θt))=i=1∑Nzi∑log[pzi⋅N(xi∣μzi,Σzi)]⋅p(zi∣xi,θt)=zi∑i=1∑Nlog[pzi⋅N(xi∣μzi,Σzi)]⋅p(zi∣xi,θt)=k=1∑Ki=1∑Nlog[pk⋅N(xi∣μk,Σk)]⋅p(zi=Ck∣xi,θt)=k=1∑Ki=1∑N[logpk+logN(xi∣μk,Σk)]⋅p(zi=Ck∣xi,θt)
- M step
EM算法的迭代公式为:
θt+1=θargmaxQ(θ,θt)
下面以求解pt+1=(p1t+1,p2t+1,⋯,pKt+1)T为例,来看如何进行迭代求解,以下是求解的迭代公式:
pkt+1=pkargmaxk=1∑Ki=1∑Nlogpk⋅p(zi=Ck∣xi,θt),s.t.k=1∑Kpk=1
于是可以转化为以下约束优化问题:
{pmin−∑k=1K∑i=1Nlogpk⋅p(zi=Ck∣xi,θt)s.t.∑k=1Kpk=1
然后使用拉格朗日乘子法进行求解:
L(p,λ)=−k=1∑Ki=1∑Nlogpk⋅p(zi=Ck∣xi,θt)+λ(k=1∑Kpk−1)∂pk∂L=−i=1∑Npk1⋅p(zi=Ck∣xi,θt)+λ=△0⇒−i=1∑Np(zi=Ck∣xi,θt)+pkt+1λ=0⇒k=1,2,⋯,K−=Ni=1∑N=1k=1∑Kp(zi=Ck∣xi,θt)+=1k=1∑Kpkt+1λ=0⇒−N+λ=0⇒λ=N代入−i=1∑Np(zi=Ck∣xi,θt)+pkt+1λ=0得−i=1∑Np(zi=Ck∣xi,θt)+pkt+1N=0⇒pkt+1=N∑i=1Np(zi=Ck∣xi,θt)
这里以求解pt+1为例展示了M step的求解过程,其他参数也按照极大化Q函数的思路就可以求解,求得一轮参数后要继续迭代求解直至收敛。