【机器学习】EM算法在高斯混合模型学习中的应用

前言

EM算法,此博客介绍了EM算法相关理论知识,看本篇博客前先熟悉EM算法。

本篇博客打算先从单个高斯分布说起,然后推广到多个高斯混合起来,最后给出高斯混合模型参数求解过程。

单个高斯分布

假如我们有一些数据,这些数据来自同一个高斯分布(独立同分布),那个我们如何根据这些数据估计出这个高斯分布的参数呢?我们知道只要知道高斯分布的参数θ={μ,σ2}就能确定此高斯分布。


【机器学习】EM算法在高斯混合模型学习中的应用

从上图中,我们要想知道数据是来自哪个高斯分布,我们就要知道高斯分布的参数,直观上可以认定数据来自参数为θ1的高斯分布,然而这毕竟是我们直观上的,那么我们应该如何根据数据估计高斯分布的参数呢?

假设数据为X={x1,x2,...,xN}xi 独立同分布 p(X|θ),其中θ={μ,σ2};

由贝叶斯公式知:

p(θ|X)p(X|θ)p(θ)

p(θ|X)为后验概率,p(X|θ)为似然度,p(θ)为先验概率。

关于贝叶斯公式的,可参考我之前的博客,里面有提到:链接

不加上先验概率,就是极大似然估计;
加上先验概率,就是极大后验概率估计
这里我们只介绍极大似然估计,极大后验概率估计类似

(1)写出对数似然函数

L(θ|X)=log [p(X|θ)]=i=1Nlog p(xi|θ)=i=1Nlog [12πσexp((xiμ)22σ2)]

(2)求极大似然估计

分别对μ,σ求偏导,并令为0:

L(θ|X)μ=(i=1Nlog [12πσexp((xiμ)22σ2)])μ=(i=1Nlog[exp((xiμ)22σ2)])μ=(i=1N(xiμ)22σ2)μ=i=1N(xiμ)σ2=0

由此得到μ的似然估计为:
μMLE=1Ni=1Nxi

L(θ|X)σ=(i=1Nlog [12πσexp((xiμMLE)22σ2)])σ=i=1Nlog12πσσ+(i=1Nlog[exp((xiμMLE)22σ2)])σ=i=1N(12πσ)2π+(i=1N(xiμMLE)22σ2)σ=N+i=1N(xiμMLE)2σ2=0

其中用到d log(1x)dx=1x
得到σ2的似然估计为:
σ2=i=1N(xiμMLE)2N

综上我们可以表述为:

θ=argmaxθ[i=1Nlog N(xi|μ,σ2)]

μL(μ,σ2|X)μσ2L(μ,σ2|X)σ

以上问题是只有一个高斯分布的,如果不止一个高斯分布呢?

高斯混合模型

同样,我们看下图:


【机器学习】EM算法在高斯混合模型学习中的应用

上图是一个高斯混合模型,此处只画了两个高斯分布,可以是多个高斯分布。

如果我们知道每一个数据属于哪一个高斯分布,就会很容易求解,但是我们不可能都知道的,这时随便一个数据点,我们应该如何判断它是哪个高斯分布产生的呢?

这里我们引入αk表示属于第k个高斯分布的权重,并满足k=1Kαk=1

这样我们可以得到:

p(X|θ)=k=1KαkN(μk,σk2)i=kKαk=1

其中N(μk,σk2)是高斯分布,αk是系数

给出定义:

高斯混合模型是指具有如下形式的概率分布模型:

p(x|θ)=k=1Kαkϕ(x|θk)

其中,αk是系数,αk0k=1Kαk=1ϕ(x|θk)是高斯分布密度,θk=(μk,σk2)
ϕ(x|θk)=12πσkexp((xμk)22σk2)

称为第k个分模型。

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

假设观测数据x1,x2,...,xN由高斯混合模型生成,

p(x|θ)=k=1Kαkϕ(x|θk)

其中,θ=(α1,α2,..,αk;θ1,θ2,..,θk),我们用EM算法估计高斯混合模型的参数θ.

1. 明确隐变量,写出完全数据的对数似然函数

我们设想数据是这样产生的:

首先依概率αk选择第k个高斯分布模型ϕ(x|θk);然后依第k个分模型的概率分布ϕ(x|θk)生成观测数据xj。这时观测数据xj,是已知的;反映观测数据xj来自第k个分模型的数据是未知的,k=1,2,...,K,以隐变量γjk表示,其定义如下:

γjk={1,jk0,j=1,2,...,N;k=1,2,...,K

有了观测数据xj及未观测数据γjk,那么完全数据是:(xj,γj1,γj2,...,γjK)j=1,2,...,N

于是,可以写出完全数据的似然函数:

p(x,γ|θ)=j=1Np(xj,γj1,γj2,...,γjK|θ)=k=1Kj=1N[αkϕ(xj|θk)]γjk=k=1Kαknkj=1N[ϕ(xj|θk)]γjk=k=1Kαknkj=1N[12πσkexp((xjμk)22σk2)]γjk

式中:nk=j=1Nγjk,k=1Knk=N

那么,对数似然函数为:

log p(x,γ|θ)=k=1K{nklog αk+j=1Nγjk[log(12π)logσk12σk2(xjμk)2]}

2. EM算法E步:确定Q函数

Q(θ,θ(i))=E[log p(x,γ|θ)|x,θ(i)]=E{k=1K{nklog αk+j=1Nγjk[log(12π)logσk12σk2(xjμk)2]}}=k=1K{j=1N(Eγjk)log αk+j=1N(Eγjk)[log(12π)logσk12σk2(xjμk)2]}

这里需要计算E(γjk|x,θ),记为γjk^
γjk^=E(γjk|x,θ)=p(γjk=1|x,θ)=p(γjk=1,xj|θ)k=1Kp(γjk=1,xj|θ)=p(xj|γjk=1,θ)p(γjk=1|θ)k=1Kp(xj|γjk=1,θ)p(γjk=1|θ)=αkϕ(xj|θk)k=1Kαkϕ(xj|θk),j=1,2,...,N;k=1,2,...,K

γjk^是在当前模型参数下第j个观测数据来自第k个分模型的概率,称为分模型k对观测数据xj的响应度。

γjk^=Eγjknk=j=1NEγjk代入之前式子即得:

Q(θ,θ(i))=k=1K{nklog αk+k=1Kγjk^[log(12π)logσk12σk2(xjμk)2]}

3.EM算法M步:

迭代的M步是求函数Q(θ,θ(i))θ的极大值,即求新一轮迭代的模型参数:

θ(i+1)=argmaxθQ(θ,θ(i))

μk^,σk2^只需要将Q函数对μk,σk2求偏导并令为0,即可得到;求αk^是在i=kKαk=1条件下求偏导数并令为0得到的,用到拉格朗日乘子法。
结果如下:

μk^=j=1Nγjk^xjj=1Nγjk^,k=1,2,...,Kσk2^=j=1Nγjk^(xjμk)2j=1Nγjk^,k=1,2,...,Kαk^=nkN=j=1Nγjk^N,k=1,2,...,K

重复以上计算,直到对数似然函数值不再有明显变化为止。

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

输入:观测数据x1,x2,...,xN,高斯混合模型

输出:高斯混合模型参数

(1)取参数的初始值开始迭代
(2)E步:依据当前模型参数,计算分模型k对观测数据xi的响应度

γjk^=αkϕ(xj|θk)k=1Kαkϕ(xj|θk),j=1,2,...,N;k=1,2,...,K

(3)M步:计算新一轮迭代的模型参数
μk^=j=1Nγjk^xjj=1Nγjk^,k=1,2,...,Kσk2^=j=1Nγjk^(xjμk)2j=1Nγjk^,k=1,2,...,Kαk^=nkN=j=1Nγjk^N,k=1,2,...,K

(4)重复第(2)步和第(3)步,直到收敛。

至此,高斯混合模型的EM算法我们就介绍完了,关于算法M步中的计算,这里没有给出,求解方法会使用到带约束条件的拉格朗日乘子法
参考资料:
李航《统计学习方法》,徐亦达机器学习