本文主要是对经典论文《What is the expectation maximization algorithm》 Figure.1的详细分析,包括EM公式的推导。
观测数据
Y 的产生方式
在前两部分所描述的问题中,观测数据
Y={y1,y2,⋯,yN} 或
X={x1,x2,⋯,xN} 的产生是按照以下规则:
1) 首先,以
P(zk=1∣θ)=πk, k∈{1,⋯,K} 的概率,确定
zk=1, zj=0 (∀j=k),
也就是选择第
k 个子分布
2) 然后,从第
k 个子分布
P(y∣zk=1,θ) (或
P(x∣zk=1,θ) )中抽出样本
y (或
x)
如果每个观测样本
yn (或
xn)的产生过程都是独立的
,那么观测样本
yn (或
xn) 的产生只与
隐藏向量
zn 有关。
如果“观测样本的抽取”采用下图中的过程:
1) 首先,以
P(zk=1∣θ)=πk, k∈{1,⋯,K} 的概率,确定
zk=1, zj=0 (∀j=k),也就是选择第
k 个子分布(图中为
K=2 的情形)
2) 然后,基于第
k 个子分布
P(y∣zk=1,θ) 的概率,重复进行
N=10 次试验,抽出其中一组样本
Yi={yi,1,yi,2,⋯,yi,N} , i∈{1,⋯,M}
下图为
M=5,N=10 的情形:选中硬币B或硬币C之后,然后投掷10次来产生10个观测结果
y 组成一组数据,整个数据集
Y={Y1,Y2,Y3,Y4,Y5} 包含“5组”观测数据,总共有“50个”观测数据。然而,隐藏变量
Z={Z1,Z2,Z3,Z4,Z5} 只有5个(而不是50个,至少从步骤上是这么说)。
图(a)中,隐藏变量集
Z 的信息已知,最大似然估计的过程和第一部分所描述的完全一致。
图(b)中,隐藏变量集
Z 的信息未知,采用
EM 算法来完成参数的估计,
EM 公式的推到过程稍有不同。
Revised From《What is the expectation maximization algorithm》 Figure.1
图(b)解释及
EM公式推导
仍然假设三硬币问题概率模型的参数为
θ=(π,p,q)
(1) 三硬币问题的 1-of-K 表示
隐藏变量
z1=1 ,即隐藏向量
z=[1,0]T,表示 事件“硬币 A 正面”
该事件的概率为
P(z1=1∣θ)=π
隐藏变量
z2=1 ,即隐藏向量
z=[0,1]T,表示 事件“硬币 A 反面”
该事件的概率为
P(z2=1∣θ)=1−π
记
P(z1=1∣θ)=π1=π
P(z2=1∣θ)=π2=1−π
则投掷硬币 A 的概率可以统一描述为:
P(zk=1∣θ)=πk , k∈{1,2}
用隐藏向量
z 表示,也就是:
P(z∣θ)=k=1∏2πkzk=π1z1⋅π2z2 ,z=[z1z2]∈{[10],[01]}
(2) 引入隐藏向量
z 表示观测值
y 的概率
单独考虑硬币 B 和硬币 C 关于观测值
y∈{0,1} 的概率:
硬币 B 的概率:
P(y∣z1=1,θ)=py(1−p)(1−y)
硬币 C 的概率:
P(y∣z2=1,θ)=qy(1−q)(1−y)
为了数学上的描述方便,记
α1=p 以及
α2=q,则:
硬币 B 的概率:
P(y∣z1=1,θ)=py(1−p)(1−y)=α1y(1−α1)(1−y)
硬币 C 的概率:
P(y∣z2=1,θ)=qy(1−q)(1−y)=α2y(1−α2)(1−y)
于是,硬币 B 和C 的概率可以统一描述为:
P(y∣zk=1,θ)=αky(1−αk)(1−y), k∈{1,2}, y∈{0,1}
用隐藏向量
z 表示,也就是:
P(y∣z,θ)=k=1∏2[ P(y∣zk=1,θ) ]zk=[P(y∣z1=1,θ)]z1⋅[P(y∣z2=1,θ)]z2=[ α1y(1−α1)(1−y) ]z1⋅[ α2y(1−α2)(1−y) ]z2=k=1∏2[ αky(1−αk)(1−y) ]zk, z=[z1z2]∈{[10],[01]}
(3) imcomlete data
样本集的似然函数
对于所有样本集
Y={Y1,Y2,⋯,YM},对应的隐藏向量集为
Z={z1,z2,⋯,zM}。
其中,第
i 组样本
Yi={yi,1,⋯,yi,n,⋯,yi,N} 又包含了
N 个样本,
i∈{1,⋯,M},
n∈{1,⋯,N},
yi,n∈{0,1},
zi=[zi1zi2]∈{[10],[01]}。
在图(a)中:
M=5,总共进行了5组实验,每组实验使用的是同一个硬币(硬币B或硬币C)
N=10,在每组实验中使用同一个硬币重复独立地进行了10次投掷过程,产生每一个观测结果
yi,n∈{0,1},i∈{1,⋯,5},n∈{1,⋯,10}。
图(a)观测结果为:
Y={Y1,Y2,Y3,Y4,Y5}
其中,
Y1={1,0,0,0,1,1,0,1,0,1},z1=[1,0]T (z11=1)
Y2={1,1,1,1,0,1,1,1,1,1},z2=[0,1]T (z22=1)
Y3={1,0,1,1,1,1,1,0,1,1},z3=[0,1]T (z32=1)
Y4={1,0,1,0,0,0,1,1,0,0},z4=[1,0]T (z41=1)
Y5={0,1,1,1,0,1,1,1,0,1},z5=[0,1]T (z52=1)
就有:
P(Y∣Z,θ)=P(Y1,Y2,Y3,Y4,Y5∣z1,⋯,zN,θ)=i=1∏MP(Yi∣zi,θ)=i=1∏MP(yi,1,yi,2,⋯,yi,N∣zi,θ)=i=1∏M{n=1∏NP(yi,n∣zi,θ)}由P(y∣zi,θ)=k=1∏2P(y∣zik=1,θ)zik=i=1∏Mn=1∏Nk=1∏2P(yi,n∣zik=1,θ)zik=i=1∏Mn=1∏Nk=1∏2[αkyi,n(1−αk)1−yi,n]zik
又由
P(zi∣θ)=k=1∏2πkzik=π1zi1⋅π2zi2 , zi=[zi1zi2]∈{[10],[01]}
从而有
P(Z∣θ)=P(z1,⋯,zM∣θ)=i=1∏MP(zi∣θ)=i=1∏Mk=1∏2πkzik, zi=[zi1zi2]∈{[10],[01]}
由于隐藏向量集
Z 无法观测,
EM算法首先对所有的隐藏向量
Z={z1,⋯,zi,⋯,zM} 进行猜测,使得观测数据从 imcomplete 形式 的
Y 变成 complete 形式 的
(Y,Z) 。
此时,complete data数据
(Y,Z) 的似然函数
(如果
Z 已知)为:
P(Y,Z∣θ)=P(Y∣Z,θ)P(Z∣θ)=i=1∏Mn=1∏Nk=1∏2P(yi,n∣zik=1,θ)zik⋅i=1∏Mk=1∏2πkzik=i=1∏Mn=1∏Nk=1∏2[αkyi,n(1−αk)1−yi,n]zik⋅i=1∏Mk=1∏2πkzik=i=1∏M{n=1∏Nk=1∏2[αkyi,n(1−αk)1−yi,n]zik⋅k=1∏2πkzik}
可得到对数似然函数
(其值取决于
Z ):
lnP(Y,Z∣θ)=i=1∑Mn=1∑Nk=1∑2ziklnP(yi,n∣zik=1,θ)+i=1∑Mk=1∑2ziklnπk
(4) 计算对数似然函数
lnP(Y,Z∣θ) 的期望
定义函数
Q(θ,θ(i)):
Q(θ,θ(i))=EP(Z∣Y,θ)[lnP(Y,Z∣θ) ∣ Y,θ(i)]=EP(Z∣Y,θ){i=1∑Mn=1∑Nk=1∑2ziklnP(yi,n∣zik=1,θ)+i=1∑Mk=1∑2ziklnπk}=i=1∑Mn=1∑Nk=1∑2EP(Z∣Y,θ)[zik]lnP(yi,n∣zik=1,θ)+i=1∑Mk=1∑2EP(Z∣Y,θ)[zik]lnπk
为了计算
Q(θ,θ(i)) 的值,必须先计算:
EP(Z∣Y,θ)[zik]=zik∑zikP(zi∣Yi,θ)
由
P(zi∣Yi,θ)=P(Yi∣θ)P(zi,Yi∣θ)=zi∑P(Yi∣zi,θ)P(zi∣θ)P(Yi∣zi,θ)P(zi∣θ), zi=[zi1zi2]∈{[10],[01]}=P(Yi∣zi1=1,θ)P(zi1=1∣θ)+P(Yi∣zi2=1,θ)P(zi2=1∣θ)P(Yi∣zik=1,θ)P(zik=1∣θ)
因此有
EP(Z∣Y,θ)[zik]=zik∑zikP(zi∣Yi,θ)=zik∑P(Yi∣zi1=1,θ)P(zi1=1∣θ)+P(Yi∣zi2=1,θ)P(zi2=1∣θ)zikP(Yi∣zik=1,θ)P(zik=1∣θ)=P(Yi∣zi1=1,θ)P(zi1=1∣θ)+P(Yi∣zi2=1,θ)P(zi2=1∣θ)1⋅P(Yi∣zik=1,θ)P(zik=1∣θ)+0⋅P(Yi∣zik=0,θ)P(zik=0∣θ)=P(Yi∣zi1=1,θ)P(zi1=1∣θ)+P(Yi∣zi2=1,θ)P(zi2=1∣θ)P(Yi∣zik=1,θ)P(zik=1∣θ)=π1P(Yi∣zi1=1,θ)+π2P(Yi∣zi2=1,θ)πkP(Yi∣zik=1,θ)
而
P(Yi∣zik=1,θ)=P(yi,1,⋯,yi,n,⋯,yi,N∣zik=1,θ)=n=1∏NP(yi,n∣zik=1,θ)=n=1∏Nαkyi,n(1−αk)(1−yi,n), k∈{1,2}, yi,n∈{0,1}
可得到:
EP(Z∣Y,θ)[zik]=π1∏n=1Nα1yi,n(1−α1)(1−yi,n)+π2∏n=1Nα2yi,n(1−α2)(1−yi,n)πk∏n=1Nαkyi,n(1−αk)(1−yi,n)
关于图(b)的解释(一)
首先假设初始值
p=α1=θ^B(0)=0.5,
q=α2=θ^C(0)=0.6,分析试验结果:
第1组试验(10次投掷,5次为正面,5次为反面):
如果是硬币C投掷的结果,则似然函数值为
LikelihoodcoinC=P(Y1∣z12=1,θ)=α25(1−α2)5=0.65⋅0.45=0.0007962624
如果是硬币B投掷的结果,则似然函数值为
LikelihoodcoinB=P(Y1∣z11=1,θ)=α15(1−α1)5=0.55⋅0.55=0.0009765625
(5) E 步公式
由于在图(b)抽取的数据中,我们并不知道隐藏变量
zi 的值,因此我们在给定模型参数为
(μ,Σ,π) 的情况下,求取了
zi 的期望:
EP(Z∣Y,θ)[zik]=π1P(Yi∣zi1=1,θ)+π2P(Yi∣zi2=1,θ)πkP(Yi∣zik=1,θ)=π1∏n=1Nα1yi,n(1−α1)(1−yi,n)+π2∏n=1Nα2yi,n(1−α2)(1−yi,n)πk∏n=1Nαkyi,n(1−αk)(1−yi,n)
并以此来代替
zik,用于进行对数似然函数值
Q(θ,θ(i)) 的计算,若记
γ(zik)=π1P(Yi∣zi1=1,θ)+π2P(Yi∣zi2=1,θ)πkP(Yi∣zik=1,θ) , k∈{1,2}
则对数似然函数为:
Q(θ,θ(i))=i=1∑Mn=1∑Nk=1∑2γ(zik)lnP(yi,n∣zik=1,θ)+i=1∑Mk=1∑2γ(zik)lnπk
三硬币问题中,由于
K=2,因此分析相对简单,可以看出:
γ(zi1)=π1P(Yi∣zi1=1,θ)+π2P(Yi∣zi2=1,θ)π1P(Yi∣zi1=1,θ),其中
P(Yi∣zi1=1,θ) 是第
i 组实验假设采用硬币B进行投掷时
(zi1=1) 对应观测数据
Yi={yi,1,⋯,yi,n,⋯,yi,N} 的似然值
(likelihood)
γ(zi2)=π1P(Yi∣zi1=1,θ)+π2P(Yi∣zi2=1,θ)π2P(Yi∣zi2=1,θ),其中
P(Yi∣zi2=1,θ) 是第
i 组实验假设采用硬币C进行投掷时
(zi2=1) 对应观测数据
Yi={yi,1,⋯,yi,n,⋯,yi,N} 的似然值
(likelihood)
显然,
γ(zi1)=1−γ(zi2)
可以看出:
(1) 在图(a)中,隐藏向量
zi=[zi1zi2]∈{[10],[01]}
(2) 然而,在图(b)的
EM 算法中,对隐藏向量
zi 的猜测为
zi=[ γ(zi1),γ(zi2) ]T,也就是在估算对数似然函数值
Q(θ,θ(i)) 的时候,同时考虑了硬币B和硬币C投掷时对应观测数据
Yi 的似然值,
γ(zik) 起到了一个加权的作用。
关于图(b)的解释(二)
第1组试验观测数据为
Yi(10次投掷,5次为正面,5次为反面):
如果是硬币C投掷的结果,则似然函数值为
P(Y1∣z12=1,θ)=α25(1−α2)5=0.65⋅0.45=0.0007962624
如果是硬币B投掷的结果,则似然函数值为
P(Y1∣z11=1,θ)=α15(1−α1)5=0.55⋅0.55=0.0009765625
由于在该论文中,假设
π1=π2=0.5,也就是等概率选择硬币B或者硬币C来投掷出
yi,n 的结果,因此:
γ(z11)=π1P(Y1∣z11=1,θ)+π2P(Y1∣z12=1,θ)π1P(Y1∣z11=1,θ)≈0.55
γ(z12)=π1P(Y1∣z11=1,θ)+π2P(Y1∣z12=1,θ)π2P(Y1∣z12=1,θ)≈0.45=1−γ(z11)
这个过程实际上就是猜测隐藏变量
z1=[0.55,0.45]T
(6) M 步公式
对数似然函数值
Q(θ,θ(i)) 分别对
α1,α2 求最大似然解:
Q(θ,θ(i))=i=1∑Mn=1∑Nk=1∑2γ(zik)lnP(yi,n∣zik=1,θ)+i=1∑Mk=1∑2γ(zik)lnπk=i=1∑Mn=1∑Nk=1∑2γ(zik)ln[αkyi,n(1−αk)(1−yi,n)]+i=1∑Mk=1∑2γ(zik)lnπk=i=1∑Mn=1∑Nk=1∑2γ(zik)[yi,nlnαk+(1−yi,n)ln(1−αk)]+i=1∑Mk=1∑2γ(zik)lnπk
∂αk∂Q(θ,θ(i))=∂αk∂{i=1∑Mn=1∑Nk=1∑2γ(zik)[yi,nlnαk+(1−yi,n)ln(1−αk)]}=i=1∑Mn=1∑Nγ(zik)[αkyi,n−1−αk1−yi,n]=0
可得到:
α^k=i=1∑Mn=1∑Nγ(zik)i=1∑Mn=1∑Nγ(zik)yi,n
关于图(b)的解释(三)
三硬币问题中
K=2
θ^B=α^1=i=1∑Mn=1∑Nγ(zi1)i=1∑Mn=1∑Nγ(zi1)yi,n=i=1∑M[yi,n=1∑γ(zi1)+yi,n=0∑γ(zi1)]i=1∑Myi,n=1∑γ(zi1)
其中,
yi,n=1∑γ(zi1) 就是
“
γ(zi1)
× 第
i 组实验中硬币B
的正面次数
”
yi,n=0∑γ(zi1) 就是
“
γ(zi1)
× 第
i 组实验中硬币B
的反面次数
”
在图(b)中:
θ^B=α^1=(2.8+2.8)+(1.8+0.2)+(2.1+0.5)+(2.6+3.9)+(2.5+1.1)2.8+1.8+2.1+2.6+2.5
=11.7+8.411.7≈0.58
θ^C=α^2=i=1∑Mn=1∑Nγ(zi2)i=1∑Mn=1∑Nγ(zi2)yi,n=i=1∑M[yi,n=1∑γ(zi2)+yi,n=0∑γ(zi2)]i=1∑Myi,n=1∑γ(zi2)
其中,
yi,n=1∑γ(zi2) 就是
“
γ(zi2)
× 第
i 组实验中硬币C
的正面次数
”
yi,n=0∑γ(zi2) 就是
“
γ(zi2)
× 第
i 组实验中硬币C
的反面次数
”
在图(b)中:
θ^C=α^2=(2.2+2.2)+(7.2+0.8)+(5.9+1.5)+(1.4+2.1)+(4.5+1.9)2.2+7.2+5.9+1.4+4.5
=21.3+8.621.3≈0.71
代码实现
《What is the expectation maximization algorithm》 Figure.1的代码实现
import numpy as np
def cal_Likelihood(alpha1, alpha2, Yi):
headCount = np.sum(Yi==1)
tailCount = np.sum(Yi==0)
likelihoodB = np.power(alpha1,headCount)*np.power(1-alpha1,tailCount)
likelihoodC = np.power(alpha2,headCount)*np.power(1-alpha2,tailCount)
gamma1 = likelihoodB/(likelihoodB + likelihoodC)
gamma2 = likelihoodC/(likelihoodB + likelihoodC)
return gamma1,gamma2
def E_Step(alpha1, alpha2, Y):
print('\n====== E-Step ======')
gamma = np.zeros((5,2))
print(('coin C, coin B ------ gamma(Zik)=E[Zik]'))
for i in range(5):
gamma1,gamma2 = cal_Likelihood(alpha1, alpha2, Y[i,:])
print((' %2.2f,\t%2.2f') % (gamma2,gamma1))
gamma[i,:] = np.array([gamma1,gamma2])
return gamma
def M_Step(gamma,Y):
print('\n====== M-Step ======')
t1h = 0.000001
t1t = 0.000001
t2h = 0.000001
t2t = 0.000001
for n in range(Y.shape[0]):
t1h = t1h + np.sum(gamma[n,0]*Y[n,:])
t1t = t1t + np.sum(gamma[n,0]*(1-Y[n,:]))
t2h = t2h + np.sum(gamma[n,1]*Y[n,:])
t2t = t2t + np.sum(gamma[n,1]*(1-Y[n,:]))
print('\nC-Head C-Tail B-Head B-Tail')
print((' %2.1f \t %2.1f \t %2.1f \t %2.1f')%(t2h,t2t,t1h,t1t))
newThetaB = t1h/(t1h+t1t)
newThetaC = t2h/(t2h+t2t)
return newThetaB, newThetaC
if __name__ == '__main__':
observationY = np.array([[1,0,0,0,1,1,0,1,0,1],\
[1,1,1,1,0,1,1,1,1,1],\
[1,0,1,1,1,1,1,0,1,1],\
[1,0,1,0,0,0,1,1,0,0],\
[0,1,1,1,0,1,1,1,0,1]])
for i in range(5):
print('Y'+str(i+1)+': '+str(observationY[i,:]))
thetaB = 0.5
thetaC = 0.6
flag = 1
iter = 0
while flag:
print('\n#iteration\t'+str(iter+1))
alpha1 = thetaB;
alpha2 = thetaC;
gamma = E_Step(alpha1, alpha2, observationY)
thetaB,thetaC = M_Step(gamma,observationY)
print(('ThetaB=%2.2f,ThetaC=%2.2f')%(thetaB,thetaC))
iter = iter + 1
if iter==10:
flag = 0
程序运行结果:
Y1: [1 0 0 0 1 1 0 1 0 1]
Y2: [1 1 1 1 0 1 1 1 1 1]
Y3: [1 0 1 1 1 1 1 0 1 1]
Y4: [1 0 1 0 0 0 1 1 0 0]
Y5: [0 1 1 1 0 1 1 1 0 1]
#iteration 1 图(b)中的数据为第一次迭代
coin C, coin B ------ gamma(Zik)=E[Zik]
0.45, 0.55
0.80, 0.20
0.73, 0.27
0.35, 0.65
0.65, 0.35
C-Head C-Tail B-Head B-Tail
21.3 8.6 11.7 8.4
ThetaB=0.58,ThetaC=0.71
#iteration 2
coin C, coin B ------ gamma(Zik)=E[Zik]
0.30, 0.70
0.81, 0.19
0.71, 0.29
0.19, 0.81
0.57, 0.43
C-Head C-Tail B-Head B-Tail
19.2 6.6 13.8 10.4
ThetaB=0.57,ThetaC=0.75
#iteration 3
coin C, coin B ------ gamma(Zik)=E[Zik]
0.22, 0.78
0.87, 0.13
0.75, 0.25
0.11, 0.89
0.58, 0.42
C-Head C-Tail B-Head B-Tail
19.4 5.9 13.6 11.1
ThetaB=0.55,ThetaC=0.77
#iteration 4
coin C, coin B ------ gamma(Zik)=E[Zik]
0.16, 0.84
0.91, 0.09
0.79, 0.21
0.07, 0.93
0.59, 0.41
C-Head C-Tail B-Head B-Tail
19.8 5.5 13.2 11.5
ThetaB=0.53,ThetaC=0.78
#iteration 5
coin C, coin B ------ gamma(Zik)=E[Zik]
0.13, 0.87
0.94, 0.06
0.82, 0.18
0.04, 0.96
0.59, 0.41
C-Head C-Tail B-Head B-Tail
20.0 5.3 13.0 11.7
ThetaB=0.53,ThetaC=0.79
#iteration 6
coin C, coin B ------ gamma(Zik)=E[Zik]
0.11, 0.89
0.95, 0.05
0.84, 0.16
0.04, 0.96
0.60, 0.40
C-Head C-Tail B-Head B-Tail
20.1 5.2 12.9 11.8
ThetaB=0.52,ThetaC=0.79
#iteration 7
coin C, coin B ------ gamma(Zik)=E[Zik]
0.11, 0.89
0.95, 0.05
0.84, 0.16
0.03, 0.97
0.60, 0.40
C-Head C-Tail B-Head B-Tail
20.1 5.2 12.9 11.8
ThetaB=0.52,ThetaC=0.80
#iteration 8
coin C, coin B ------ gamma(Zik)=E[Zik]
0.10, 0.90
0.95, 0.05
0.84, 0.16
0.03, 0.97
0.60, 0.40
C-Head C-Tail B-Head B-Tail
20.2 5.2 12.8 11.8
ThetaB=0.52,ThetaC=0.80
#iteration 9
coin C, coin B ------ gamma(Zik)=E[Zik]
0.10, 0.90
0.95, 0.05
0.84, 0.16
0.03, 0.97
0.60, 0.40
C-Head C-Tail B-Head B-Tail
20.2 5.1 12.8 11.9
ThetaB=0.52,ThetaC=0.80
#iteration 10
coin C, coin B ------ gamma(Zik)=E[Zik]
0.10, 0.90
0.95, 0.05
0.85, 0.15
0.03, 0.97
0.60, 0.40
C-Head C-Tail B-Head B-Tail
20.2 5.1 12.8 11.9
ThetaB=0.52,ThetaC=0.80