在高斯混合模型中使用EM算法
机器学习
1. 高斯混合模型(Gaussian Misture Model, GMM)
高斯混合模型是指具有如下形式的概率分布模型:
P(x|θ)=∑k=1Kαkϕ(x|θk)
- xi表示第i个观测数据,i=1,2,...,N
- K是混合模型中子高斯模型的数量,k=1,2,...,K
- αk是观测数据属于第k个子模型的概率,αk≥0,∑Kk=1αk=1
- ϕ(x|θk)是第k个子模型的高斯分布密度函数,θk=(μk,σ2k),即:
ϕ(x|θk)=12πσ2k−−−−√exp(−(x−μk)22σ2k)
2. 模型参数学习
用EM算法估计高斯混合模型的参数θ=(α1,α2,⋯,αK;θ1,θ2,⋯,θK).
(1) 明确隐变量
考虑观测数据xi,i=1,2,...,N,的产生方式:首先依概率αk选择第k个高斯模型ϕ(x|θk);然后依第k个子模型的概率分布ϕ(x|θk)生成观测数据xi。此时观测数据xi已知,反映观测数据xi来自第k个分模型的数据未知,定义隐变量γik:
γik={1,0,第i个观测来自第k个子模型否则i=1,2,⋯,N;k=1,2,⋯,K
那么完全数据可表示为
(xi,γi1,γi2,⋯,γiK),i=1,2,⋯,N
(2) 完全数据的对数似然函数
似然函数:
P(x,γ|θ)=∏i=1NP(xi,γi1,γi2,⋯,γiK|θ)=∏k=1K∏i=1N[αkϕ(xi|θk)]γik=∏k=1Kαnkk∏i=1N[ϕ(xi|θk)]γik=∏k=1Kαnkk∏i=1N[12π−−√σkexp(−(xi−μk)22σ2k)]γik
nk=∑Ni=1γik 为第k个组分生成的样本数,∑Kk=1nk=N.
对数似然函数:
logP(x,γ|θ)=∑k=1K{nklogak+∑i=1Nγik[log(12π−−√)−logσk−12σ2k(xi−μk)2]}
(3) E步
Q(θ,θ(i))=E[logP(x,γ|θ(i))|x,θ(i)]=E{∑k=1K{nklogak+∑i=1Nγik[log(12π−−√)−logσk−12σ2k(xi−μk)2]}}=∑k=1K{∑i=1N(Eγik)logak+∑i=1N(Eγik)[log(12π−−√)−logσk−12σ2k(xi−μk)2]}
这里需要计算E(γik|x,θ),记作γ^ik.
γ^ik=E(γik|x,θ)=E(γik=1|x,θ)=P(γik=1,xi|θ)∑Kk=1P(γik=1,xi|θ)=P(xi|γik=1,θ)P(γik=1|θ)∑Kk=1P(xi|γik=1,θ)P(γik=1|θ)=αkϕ(xi|θk)∑Kk=1αkϕ(xi|θk),i=1,2,...,N;k=1,2,...,K
γ^ik表示当前模型参数下第i个观测数据来自第k个子模型的概率。
将 γ^ik=Eγik 及 n^k=∑Ni=1(Eγik) 带入 Q(θ,θ(i)):
Q(θ,θ(i))=∑k=1K{n^klogak+∑i=1Nγ^ik[log(12π−−√)−logσk−12σ2k(xi−μk)2]}
(4) M步
求函数Q(θ,θ(i))对θ的极大值,新一轮的模型参数为:
θ(i+1)=argmaxθQ(θ,θ(i))
用μ^k,σ^2k和α^k,k=1,2,⋯,K,表示θ(i+1)的各参数。分别对μk,σ2k求偏导令其为0,得到μ^k,σ^2k;在∑Kk=1αk=1条件下对αk求偏导令其为0,得到α^k。
μ^kΣ^kα^k=∑Ni=1(γ^ikxi)∑Ni=1γ^ik,k=1,2,...,K=∑Ni=1γ^ik(xi−μ^k)2∑Ni=1γ^ik,k=1,2,...,K(用这一轮更新后的μk^)=∑Ni=1γ^ikN,k=1,2,...,K
算法总结
(1) 初始化参数。
(2) E步:依据当前模型参数,计算子模型k对观测数据xi的响应度
γ^ik=αkϕ(xi|θk)∑Kk=1αkϕ(xi|θk),i=1,2,...,N;k=1,2,...,K
(3) M步:计算新一轮迭代的参数模型
μ^kΣ^kα^k=∑Ni=1(γ^ikxi)∑Ni=1γ^ik,k=1,2,...,K=∑Ni=1γ^ik(xi−μ^k)2∑Ni=1γ^ik,k=1,2,...,K=∑Ni=1γ^ikN,k=1,2,...,K
(4) 重复第(2)(3)步直至收敛。