前言
EM算法,此博客介绍了EM算法相关理论知识,看本篇博客前先熟悉EM算法。
本篇博客打算先从单个高斯分布说起,然后推广到多个高斯混合起来,最后给出高斯混合模型参数求解过程。
单个高斯分布
假如我们有一些数据,这些数据来自同一个高斯分布(独立同分布),那个我们如何根据这些数据估计出这个高斯分布的参数呢?我们知道只要知道高斯分布的参数θ={μ,σ2}就能确定此高斯分布。

从上图中,我们要想知道数据是来自哪个高斯分布,我们就要知道高斯分布的参数,直观上可以认定数据来自参数为
θ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)∂μ=∂(∑Ni=1log [12π√σexp(−(xi−μ)22σ2)])∂μ=∂(∑Ni=1log[exp(−(xi−μ)22σ2)])∂μ=∂(∑Ni=1−(xi−μ)22σ2)∂μ=−∑i=1N(xi−μ)σ2=0
由此得到
μ的似然估计为:
μMLE=1N∑i=1Nxi
∂L(θ|X)∂σ=∂(∑Ni=1log [12π√σexp(−(xi−μMLE)22σ2)])∂σ=∂∑Ni=1log12π√σ∂σ+∂(∑Ni=1log[exp(−(xi−μMLE)22σ2)])∂σ=∑i=1N−(12π−−√σ)2π−−√+∂(∑Ni=1−(xi−μMLE)22σ2)∂σ=−N+∑Ni=1(xi−μMLE)2σ2=0
其中用到
d log(1x)dx=−1x
得到
σ2的似然估计为:
σ2=∑Ni=1(xi−μMLE)2N
综上我们可以表述为:
θ=argmaxθ[∑i=1Nlog N(xi|μ,σ2)]
μ→∂L(μ,σ2|X)∂μσ2→∂L(μ,σ2|X)∂σ
以上问题是只有一个高斯分布的,如果不止一个高斯分布呢?
高斯混合模型
同样,我们看下图:

上图是一个高斯混合模型,此处只画了两个高斯分布,可以是多个高斯分布。
如果我们知道每一个数据属于哪一个高斯分布,就会很容易求解,但是我们不可能都知道的,这时随便一个数据点,我们应该如何判断它是哪个高斯分布产生的呢?
这里我们引入αk表示属于第k个高斯分布的权重,并满足∑Kk=1αk=1
这样我们可以得到:
p(X|θ)=∑k=1KαkN(μk,σ2k)∑i=kKαk=1
其中N(μk,σ2k)是高斯分布,αk是系数
给出定义:
高斯混合模型是指具有如下形式的概率分布模型:
p(x|θ)=∑k=1Kαkϕ(x|θk)
其中,
αk是系数,
αk⩾0∑Kk=1αk=1;
ϕ(x|θk)是高斯分布密度,
θk=(μk,σ2k),
ϕ(x|θk)=12π−−√σkexp(−(x−μk)22σ2k)
称为第
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,第j个观测来自第k个分模型0,否则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=1K∏j=1N[αkϕ(xj|θk)]γjk=∏k=1Kαnkk∏j=1N[ϕ(xj|θk)]γjk=∏k=1Kαnkk∏j=1N[12π−−√σkexp(−(xj−μk)22σ2k)]γjk
式中:
nk=∑Nj=1γjk,∑Kk=1nk=N
那么,对数似然函数为:
log p(x,γ|θ)=∑k=1K{nklog αk+∑j=1Nγjk[log(12π−−√)−logσk−12σ2k(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σk−12σ2k(xj−μk)2]}}=∑k=1K{∑j=1N(Eγjk)log αk+∑j=1N(Eγjk)[log(12π−−√)−logσk−12σ2k(xj−μk)2]}
这里需要计算
E(γjk|x,θ),记为
γjk^ γjk^=E(γjk|x,θ)=p(γjk=1|x,θ)=p(γjk=1,xj|θ)∑Kk=1p(γjk=1,xj|θ)=p(xj|γjk=1,θ)p(γjk=1|θ)∑Kk=1p(xj|γjk=1,θ)p(γjk=1|θ)=αkϕ(xj|θk)∑Kk=1αkϕ(xj|θk),j=1,2,...,N;k=1,2,...,K
γjk^是在当前模型参数下第j个观测数据来自第k个分模型的概率,称为分模型k对观测数据xj的响应度。
将γjk^=Eγjk及nk=∑Nj=1Eγjk代入之前式子即得:
Q(θ,θ(i))=∑k=1K{nklog αk+∑k=1Kγjk^[log(12π−−√)−logσk−12σ2k(xj−μk)2]}
3.EM算法M步:
迭代的M步是求函数Q(θ,θ(i))对θ的极大值,即求新一轮迭代的模型参数:
θ(i+1)=argmaxθQ(θ,θ(i))
求 μk^,σ2k^只需要将Q函数对μk,σ2k求偏导并令为0,即可得到;求αk^是在∑Ki=kαk=1条件下求偏导数并令为0得到的,用到拉格朗日乘子法。
结果如下:
μk^=∑Nj=1γjk^xj∑Nj=1γjk^,k=1,2,...,Kσ2k^=∑Nj=1γjk^(xj−μk)2∑Nj=1γjk^,k=1,2,...,Kαk^=nkN=∑Nj=1γjk^N,k=1,2,...,K
重复以上计算,直到对数似然函数值不再有明显变化为止。
高斯混合模型参数估计的EM算法
输入:观测数据x1,x2,...,xN,高斯混合模型
输出:高斯混合模型参数
(1)取参数的初始值开始迭代
(2)E步:依据当前模型参数,计算分模型k对观测数据xi的响应度
γjk^=αkϕ(xj|θk)∑Kk=1αkϕ(xj|θk),j=1,2,...,N;k=1,2,...,K
(3)M步:计算新一轮迭代的模型参数
μk^=∑Nj=1γjk^xj∑Nj=1γjk^,k=1,2,...,Kσ2k^=∑Nj=1γjk^(xj−μk)2∑Nj=1γjk^,k=1,2,...,Kαk^=nkN=∑Nj=1γjk^N,k=1,2,...,K
(4)重复第(2)步和第(3)步,直到收敛。
至此,高斯混合模型的EM算法我们就介绍完了,关于算法M步中的计算,这里没有给出,求解方法会使用到带约束条件的拉格朗日乘子法
参考资料:
李航《统计学习方法》,徐亦达机器学习