1. EM算法的基本思想
我们在应用中所面对的数据有时是缺损的/观测不完全的[1][2]。我们将数据分为:
- 可观测数据,用Y表示;
- 缺失数据,用Z表示;
- 完全数据,用X=(Y,Z)表示。
我们尝试直接对可观测数据做极大似然估计:
L(θ|Y)=P(Y|θ)
但是这样的似然函数可能非常复杂。我们发现完全数据的似然,即
L(θ|Y,Z)=P(Y,Z|θ)
估计的难度要小得多。
除此之外对条件概率分布P(Z|Y,θ)进行估计的难度也要小得多。
EM算法的基本思想是通过P(Y,Z|θ)和P(Z|Y,θ)这两个容易进行估计的分布来估计P(Y|θ)。
事实上,在应用中缺失数据Z常常并不是真实存在,而是人为造出来的(为了方便概率分布的估计)。我们此时将缺失数据Z称为隐含数据(latent data)。
2. EM算法框架与解释
2.1 算法框架
EM算法不是单指一个算法,而是指一种算法设计思想,它是一类算法的框架。它通过迭代求对数似然函数logL(θ|Y)=logP(Y|θ)的极大似然估计。每次迭代包含两步:E步,求期望;M步,求极大化。下面是EM算法的描述:
2.2 算法推导
那为什么EM算法的E步会求 ∑ZlogP(Y,Z|θ)P(Z|Y,θ(t))这样一个期望呢?
我们知道,可观测数据Y是给定的,我们原本想对logP(Y|θ)做极大似然估计。而我们可以进一步得到
logP(Y|θ)=log∑ZP(Y,Z|θ)P(Z|θ)=log∑ZP(Y,Z|θ)q(Z)q(Z)P(Z|θ)⩾∑Zlog[P(Y,Z|θ)q(Z)q(Z)]P(Z|θ)(由log凹函数和Jensen不等式)
其中q(Z)为不等于0的关于Z的某个分布。不等式可以看做是一个找下界的过程。
在我们这个情境下设q(Z)=P(Z|Y,θ(t)),就得到了下界为
∑Zlog[P(Y,Z|θ)P(Z|Y,θ(t))P(Z|Y,θ(t))]P(Z|θ)
将log函数内的部分展开为
∑Z(logP(Y,Z|θ)P(Z|Y,θ(t)))−logP(Z|Y,θ(t)))P(Z|θ)
而P(Z|Y,θ(t))相对于θ是常数不用管,而前一项∑ZlogP(Y,Z|θ)P(Z|Y,θ(t))就是我们的Q函数。
因此我们可以说Q函数在每次迭代中去逼近logP(Y|θ)的下界。多次迭代极大化Q函数就能起到极大化logP(Y|θ)的效果。
EM算法不断逼近函数下界的过程可以形象化解释为下图:
3. EM算法在高斯混合模型(GMM)中的应用
3.1 模型背景
在高斯混合聚类模型中,我们假设d维样本空间中的观测数据样本点y服从高斯混合分布[3][4]
p(y|Θ)=K∑k=1αkϕ(y|uk,Σk)
其中ϕ(y|uk,Σk)为多元高斯分布
ϕ(y|uk,Σk)=1(2π)d2|Σ|12e−12(y−u)TΣ−1(y−u)
且有αk>0,∑Kk=1αk=1。
高斯混合分布可以形象化地由下图表示:
我们假设样本的生成过程由高斯混合分布给出:首先,选择高斯混合成分,其中αk为选择第k个混合成分的概率;然后根据选择的混合成分的概率密度函数进行采样,从而生成相应的样本。
3.2 高斯混合聚类算法推导
我们令随机变量Ci∈{1,2,...,K}表示样本yi的高斯混合成分。而这个Ci也就对应了我们打算将样本yi聚为第几类,它的取值就是我们的聚类算法要求的。我们的模型需要按照贝叶斯定理估计Ci的后验分布
p(Ci=k|yi)=p(Ci=k)p(yi|Ci=k)p(yi|Θ)=αkϕ(y|uk,Σk)∑Kk=1αkϕ(y|uk,Σk)
则我们按照以下法则确定样本yi被划分为的簇标记c∗i:
c∗i=argmaxk∈{1,2...,K}p(Ci=k|yi)
我们前面提到按照贝叶斯定理估计概率分布p(Ci=k|yi),但我们需要先确定数据生成分布p(yi|Θ)中的参数Θ={(αk,uk,Σk)|1⩽k⩽K},这时就可以套用我们前面的EM算法了。
我们设yi为可观测数据,zi=(zi1,zi2,...,ziK)T(one-hot向量,表示样本i的聚类结果)为未观测数据,x=(yi,zi)为完全数据。
按照EM算法的流程走:
(1) E步,即写出Q函数
Q(Θ|Θ(t))=Ez[log p(y,z|Θ)|y,Θ(t)]
我么需要先写出完全数据的对数似然函数:
log p(y,z|Θ)=logN∏i=1p(yi,zi|Θ)=logK∏k=1N∏i=1[αkϕ(yi|μk,Σk)]zik=log(K∏kαnkkN∏i=1ϕ(yi|μk,Σk)zik)=K∑k=1(nklogαk+N∑i=1ziklogϕ(yi|μk,Σk))
然后按照Q函数的定义求条件期望得:
Q(Θ|Θ(t))=Ez[K∑k=1(nklogαk+N∑i=1ziklogϕ(yi|μk,Σk))|y,Θ(t)]=K∑k=1(N∑i=1E(zik|y,Θ(t))logαk+N∑i=1E(zik|y,Θ(t))logϕ(yi|μk,Σk))
这里E(zik|y,Θ(t))就等于我们前面用贝叶斯定理求的 p(Ci=k|yi),我们将其简写为^zik。进一步将Q
函数写为:
Q(Θ|Θ(t))=K∑k=1[N∑i=1^ziklogαk+N∑i=1^zik(log(1(2π)d2)−log|Σk|12−12(yi−μk)TΣk(yi−μk))]
(2) M步,求极大化Q函数的新一轮迭代参数
我们只需将上式分别对μk、Σk, αk(满足∑Kk=1αk=1)求偏导并令其等于0,可得到:
μ(t+1)k=∑Ni=1^zikyi∑Ni=1^zikΣ(t+1)k=∑Ni=1^zik(yi−μk)(yi−μk)T∑Ni=1^zikα(t+1)k=∑Ni=1^zikN
3.3 高斯混合聚类算法描述
算法描述如下所示:
引用
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 易语言 —— 开山篇
· 实操Deepseek接入个人知识库
· Trae初体验