Expectation Maximization Algorithm
1 极大似然估计(Maximum Likelihood Estimate)
极大似然估计思想:若已知某事件A发生有多种概率可能性 P 1 , P 2 . . . P n P_1,P_2...P_n P1,P2...Pn,则认为其中最大的概率为事件A发生的概率。
极大似然估计的通常解法:
①构造似然函数
L
(
θ
1
,
θ
2
,
.
.
.
,
θ
n
)
=
{
∏
i
=
1
n
P
(
x
i
;
θ
1
,
θ
2
,
.
.
.
,
θ
n
)
∏
i
=
1
n
f
(
x
i
;
θ
1
,
θ
2
,
.
.
.
,
θ
n
)
L(\theta_1,\theta_2,...,\theta_n)=\left\{ \begin{array}{ll} \prod_{i=1}^{n}P(x_i;\theta_1,\theta_2,...,\theta_n)\\\\ \prod_{i=1}^{n}f(x_i;\theta_1,\theta_2,...,\theta_n) \end{array} \right.
L(θ1,θ2,...,θn)=⎩⎨⎧∏i=1nP(xi;θ1,θ2,...,θn)∏i=1nf(xi;θ1,θ2,...,θn)
②对似然函数取对数
③两边同时求导
④令导数等于为0,解似然方程
2 期望极大算法(Expectation Maximization Algorithm)
2.1 基本思想
假设有两个数据集 A 、 B A、B A、B, A ∼ N ( μ , σ 2 ) 、 B ∼ N ( μ , σ 2 ) A\sim{N(\mu,\sigma^2)}、B\sim{N(\mu,\sigma^2)} A∼N(μ,σ2)、B∼N(μ,σ2),通过MLE我们快速的求出 μ 1 ^ , σ 1 2 ^ , μ 2 ^ , σ 2 2 ^ \hat{\mu_1},\hat{\sigma_1^2},\hat{\mu_2},\hat{\sigma_2^2} μ1^,σ12^,μ2^,σ22^
若将 A 、 B A、B A、B两个数据集混合,如何求 μ 1 ^ , σ 1 2 ^ , μ 2 ^ , σ 2 2 ^ \hat{\mu_1},\hat{\sigma_1^2},\hat{\mu_2},\hat{\sigma_2^2} μ1^,σ12^,μ2^,σ22^ ?
想要解决这个问题就需要使用到EM算法:
①首先给 μ 1 , σ 1 2 , μ 2 , σ 2 2 \mu_1,\sigma_1^2,\mu_2,\sigma_2^2 μ1,σ12,μ2,σ22设定一个初始值,即 μ 1 ( 0 ) , σ 1 2 ( 0 ) , μ 2 ( 0 ) , σ 2 2 ( 0 ) \mu_1^{(0)},{\sigma_1^2}^{(0)},\mu_2^{(0)},{\sigma_2^2}^{(0)} μ1(0),σ12(0),μ2(0),σ22(0)
②利用已知的 μ 1 ( i ) , σ 1 2 ( i ) , μ 2 ( i ) , σ 2 2 ( i ) \mu_1^{(i)},{\sigma_1^2}^{(i)},\mu_2^{(i)},{\sigma_2^2}^{(i)} μ1(i),σ12(i),μ2(i),σ22(i)去判断数据集中的每个样本是属于数据集 A A A还是数据集 B B B,并将数据集重新标注
③利用重新标注的数据集通过MLE得到新的 μ 1 , σ 1 2 , μ 2 , σ 2 2 \mu_1,\sigma_1^2,\mu_2,\sigma_2^2 μ1,σ12,μ2,σ22
④重复②、③直至 μ 1 , σ 1 2 , μ 2 , σ 2 2 \mu_1,\sigma_1^2,\mu_2,\sigma_2^2 μ1,σ12,μ2,σ22收敛
2.2 EM算法
输入:观测变量数据 Y Y Y,隐变从量数据 Z Z Z,联合分布 P ( Y , Z ∣ θ ) P(Y,Z\mid \theta) P(Y,Z∣θ),条件分布 P ( Z ∣ Y , θ ) P(Z\mid Y,\theta) P(Z∣Y,θ);
输出:模型参数 θ \theta θ
(1) 选择模型参数的初始值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
(2) E步:记
θ
(
i
)
\theta^{(i)}
θ(i) 表示第
i
i
i 次迭代参数
θ
\theta
θ 的估计值,在第
i
+
1
i+1
i+1 次迭代的E步,计算
Q
(
θ
,
θ
(
i
)
)
=
E
Z
[
log
P
(
Y
,
Z
∣
θ
)
∣
Y
,
θ
(
i
)
]
=
∑
Z
log
P
(
Y
,
Z
∣
θ
)
P
(
Z
∣
Y
,
θ
(
i
)
)
\begin{aligned} Q(\theta,\theta^{(i)})&=E_Z[\log P(Y,Z\mid \theta)\mid Y,\theta^{(i)}] \\&=\sum_Z\log P(Y,Z\mid \theta)P(Z\mid Y,\theta^{(i)}) \end{aligned}
Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑logP(Y,Z∣θ)P(Z∣Y,θ(i))
(3) M步:求使
Q
(
θ
,
θ
(
i
)
)
Q(\theta,\theta^{(i)})
Q(θ,θ(i)) 极大化的
θ
\theta
θ,确定第
i
+
1
i + 1
i+1 次迭代的参数的估计值
θ
(
i
+
1
)
\theta^{(i+1)}
θ(i+1)
θ
(
i
+
1
)
=
arg
max
Q
(
θ
,
θ
(
i
)
)
\theta^{(i+1)}=\arg \max Q(\theta,\theta^{(i)})
θ(i+1)=argmaxQ(θ,θ(i))
(4) 重复第(2)步和第(3)步,直到收敛。
2.3 数学推导
假设目标函数为 L ( θ ) = ∏ P θ ( y i ) L(\theta)=\prod{P_\theta(y_i)} L(θ)=∏Pθ(yi),其中 θ \theta θ 为需要求解的参数
在没有隐变量(未观测变量)的情况下,求解
L
(
θ
)
L(\theta)
L(θ) 的最大值的一般步骤:
①
:
ln
L
(
θ
)
=
∑
ln
P
θ
(
y
i
)
②
:
d
ln
L
(
θ
)
d
θ
=
d
∑
ln
P
θ
(
y
i
)
d
θ
=
0
③
:
设
θ
0
满
足
上
述
表
达
式
,
则
max
(
L
(
θ
)
)
=
L
(
θ
0
)
\begin{aligned} &①:\ln{L(\theta)}=\sum{\ln{P_\theta(y_i)}}\\&②:\frac{\mathrm{d} \ln{L(\theta)}}{\mathrm{d} \theta} =\frac{\mathrm{d} \sum{\ln{P_\theta(y_i)}}}{\mathrm{d} \theta}=0 \\&③:设\theta_0满足上述表达式,则\max (L(\theta))=L(\theta_0) \end{aligned}
①:lnL(θ)=∑lnPθ(yi)②:dθdlnL(θ)=dθd∑lnPθ(yi)=0③:设θ0满足上述表达式,则max(L(θ))=L(θ0)
在概率函数中存在隐变量时,由全概率公式
P
(
B
)
=
∑
P
(
A
i
)
P
(
B
∣
A
i
)
P(B)=\sum{P(A_i)}P(B\mid{A_i})
P(B)=∑P(Ai)P(B∣Ai) 可得:
P
θ
(
y
i
)
=
∑
z
P
θ
(
z
)
P
θ
(
y
i
∣
z
)
P_{\theta}(y_i)=\sum_{z}P_{\theta}(z)P_{\theta}(y_i\mid{z})
Pθ(yi)=∑zPθ(z)Pθ(yi∣z),其中
z
z
z 为隐变量:
∴
L
(
θ
)
=
∏
∑
z
P
θ
(
z
)
P
θ
(
y
i
∣
z
)
\therefore L(\theta)=\prod \sum_{z}P_\theta(z)P_\theta(y_i\mid z)
∴L(θ)=∏z∑Pθ(z)Pθ(yi∣z)
两边同时取对数:
∴
ln
L
(
θ
)
=
∑
ln
∑
z
P
θ
(
z
)
P
θ
(
y
i
∣
z
)
\therefore \ln L(\theta)=\sum \ln \sum_{z} P_{\theta}(z) P_{\theta}(y_i \mid z)
∴lnL(θ)=∑lnz∑Pθ(z)Pθ(yi∣z)
由于
ln
\ln
ln 项中有和式,在偏导数的情况下会非常复杂,因此使用迭代的方式求解析解的近似解。
设第
n
n
n 次计算出来的
θ
\theta
θ 为
θ
(
n
)
\theta^{(n)}
θ(n),第
n
+
1
n+1
n+1 次计算出来的
θ
\theta
θ 为
θ
(
n
+
1
)
\theta^{(n+1)}
θ(n+1),则:
∴
ln
L
(
θ
(
n
+
1
)
)
−
ln
L
(
θ
(
n
)
)
=
∑
ln
∑
z
P
θ
(
n
+
1
)
(
z
)
P
θ
(
n
+
1
)
(
y
i
∣
z
)
−
∑
ln
P
θ
(
n
)
(
z
)
P
θ
(
n
)
(
y
i
∣
z
)
\therefore \ln L(\theta^{(n+1)})-\ln L(\theta^{(n)})=\sum \ln \sum_z P_{\theta^{(n+1)}}(z)P_{\theta^{(n+1)}}(y_i\mid z)-\sum \ln P_{\theta^{(n)}}(z)P_{\theta^{(n)}}(y_i\mid z)
∴lnL(θ(n+1))−lnL(θ(n))=∑lnz∑Pθ(n+1)(z)Pθ(n+1)(yi∣z)−∑lnPθ(n)(z)Pθ(n)(yi∣z)
由于
θ
(
n
)
\theta^{(n)}
θ(n) 已经求出,所以
θ
(
n
)
\theta^{(n)}
θ(n) 是一个已知常数,因此右式中的第二项中的隐变量不用表示体现出来。
∴
ln
L
(
θ
(
n
+
1
)
)
−
ln
L
(
θ
(
n
)
)
=
∑
[
ln
∑
z
P
θ
(
n
+
1
)
(
z
)
P
θ
(
n
+
1
)
(
y
i
∣
z
)
−
ln
P
θ
(
n
)
(
y
i
)
]
\therefore \ln L(\theta^{(n+1)})-\ln L(\theta^{(n)})=\sum{[\ln \sum_z P_{\theta^{(n+1)}}(z)P_{\theta^{(n+1)}}(y_i\mid z)-\ln P_{\theta^{(n)}}(y_i) ]}
∴lnL(θ(n+1))−lnL(θ(n))=∑[lnz∑Pθ(n+1)(z)Pθ(n+1)(yi∣z)−lnPθ(n)(yi)]
上式经过化简之后可得:
ln
L
(
θ
(
n
+
1
)
)
≥
∑
i
=
1
N
∑
z
P
θ
(
n
)
(
z
∣
y
i
)
[
ln
P
θ
(
n
+
1
)
(
y
i
,
z
)
P
θ
(
n
)
(
z
,
y
i
)
]
+
ln
L
(
θ
(
n
)
)
\ln L(\theta^{(n+1)}) \ge \sum_{i=1}^{N} \sum_{z}P_{\theta^{(n)}}(z\mid y_i)[\ln \frac{P_{\theta^{(n+1)}}(y_i,z)}{P_{\theta^{(n)}}(z,y_i)}]+\ln L(\theta^{(n)})
lnL(θ(n+1))≥i=1∑Nz∑Pθ(n)(z∣yi)[lnPθ(n)(z,yi)Pθ(n+1)(yi,z)]+lnL(θ(n))
记右式为
Q
(
θ
(
n
+
1
)
∣
θ
(
n
)
)
Q(\theta^{(n+1)}\mid \theta^{(n)})
Q(θ(n+1)∣θ(n)),该函数称为下边界函数。
EM算法的目的是要取得目标函数的极大值,那么可以不断地提升下边界函数值来提升目标函数的值,直至收敛。
∴
Q
(
θ
(
n
+
1
)
∣
θ
(
n
)
)
=
∑
i
=
1
N
∑
z
P
θ
(
n
)
(
z
∣
y
i
)
[
ln
P
θ
(
n
+
1
)
(
y
i
,
z
)
P
θ
(
n
)
(
z
,
y
i
)
]
+
ln
L
(
θ
(
n
)
)
=
∑
i
=
1
N
∑
z
P
θ
(
n
)
(
z
∣
y
i
)
ln
P
θ
(
n
+
1
)
(
y
i
,
z
)
−
∑
i
=
1
N
∑
z
P
θ
(
n
)
(
z
∣
y
i
)
ln
P
θ
(
n
)
(
z
,
y
i
)
+
ln
L
(
θ
(
n
)
)
\begin{aligned} \therefore Q(\theta^{(n+1)}\mid \theta^{(n)})\ &=\sum_{i=1}^{N} \sum_{z}P_{\theta^{(n)}}(z\mid y_i)[\ln \frac{P_{\theta^{(n+1)}}(y_i,z)}{P_{\theta^{(n)}}(z,y_i)}]+\ln L(\theta^{(n)})\\ &=\sum_{i=1}^{N} \sum_{z}P_{\theta^{(n)}}(z\mid y_i)\ln P_{\theta^{(n+1)}}(y_i,z)-\sum_{i=1}^{N} \sum_{z}P_{\theta^{(n)}}(z\mid y_i)\ln P_{\theta^{(n)}}(z,y_i) + \ln L(\theta^{(n)}) \end{aligned}
∴Q(θ(n+1)∣θ(n)) =i=1∑Nz∑Pθ(n)(z∣yi)[lnPθ(n)(z,yi)Pθ(n+1)(yi,z)]+lnL(θ(n))=i=1∑Nz∑Pθ(n)(z∣yi)lnPθ(n+1)(yi,z)−i=1∑Nz∑Pθ(n)(z∣yi)lnPθ(n)(z,yi)+lnL(θ(n))
上述右式中只有第一项含有未知参数
θ
(
n
+
1
)
\theta^{(n+1)}
θ(n+1),那么接下来我们只需要令
∂
Q
(
θ
(
n
+
1
)
∣
θ
(
n
)
)
∂
θ
(
n
+
1
)
=
0
\frac{\partial Q(\theta^{(n+1)}\mid \theta^{(n)})}{\partial \theta^{(n+1)}}=0
∂θ(n+1)∂Q(θ(n+1)∣θ(n))=0,即可求出
θ
(
n
+
1
)
=
arg
max
(
Q
(
θ
(
n
+
1
)
∣
θ
(
n
)
)
)
\theta^{(n+1)}=\arg\max(Q(\theta^{(n+1)}\mid \theta^{(n)}))
θ(n+1)=argmax(Q(θ(n+1)∣θ(n))),将求出的
θ
(
n
+
1
)
\theta^{(n+1)}
θ(n+1) 代入
Q
(
θ
(
n
+
2
)
∣
θ
(
n
+
1
)
)
Q(\theta^{(n+2)}\mid \theta^{(n+1)})
Q(θ(n+2)∣θ(n+1)) 即可求出
θ
(
n
+
2
)
\theta^{(n+2)}
θ(n+2) …然后不断的迭代直至
θ
\theta
θ 收敛,我们便可以求出满足条件的
θ
\theta
θ。
2.4 Python代码实现
三硬币模型
题面:
假设有3枚硬币,分别记作A,B,C。这些硬币正面出现的概率分别为
π
,
p
\pi,p
π,p 和
q
q
q。进行如下抛硬币试验:先抛硬币A,根据其结果选出硬币B或硬币C,正面选硬币B,反面选硬币C;然后掷选出的硬币,掷硬币的结果,出现正面记作1,出现反面记作0;独立地重复
n
n
n 次试验(这里,n=10),观测结果如下:
1
,
1
,
0
,
1
,
0
,
0
,
1
,
0
,
1
,
1
1,1,0,1,0,0,1,0,1,1
1,1,0,1,0,0,1,0,1,1
假设只能观测到掷硬币的结果,不能观测掷硬币的过程。问如何估计三硬币正面出现的概率,即三硬币模型的参数。
解:
因为
P
(
A
硬
币
正
面
)
=
π
,
P
(
B
硬
币
正
面
)
=
p
,
P
(
C
硬
币
正
面
)
=
q
P(A硬币正面)=\pi,P(B硬币正面)=p,P(C硬币正面)=q
P(A硬币正面)=π,P(B硬币正面)=p,P(C硬币正面)=q,设
y
y
y 为某一次试验的观测量,
θ
=
(
π
,
p
,
q
)
\theta=(\pi,p,q)
θ=(π,p,q) 为模型参数
∴
P
(
y
=
1
∣
θ
)
=
π
p
+
(
1
−
π
)
q
∴
P
(
y
=
0
∣
θ
)
=
π
(
1
−
p
)
+
(
1
−
π
)
(
1
−
q
)
∴
P
(
y
∣
θ
)
=
π
p
y
(
1
−
q
)
1
−
y
+
(
1
−
π
)
q
y
(
1
−
p
)
1
−
y
\begin{aligned} &\therefore P(y=1\mid\theta)=\pi p+(1-\pi)q\\ &\therefore P(y=0\mid\theta)=\pi(1-p)+(1-\pi)(1-q)\\ &\therefore P(y\mid\theta)=\pi p^y(1-q)^{1-y}+(1-\pi)q^y(1-p)^{1-y} \end{aligned}
∴P(y=1∣θ)=πp+(1−π)q∴P(y=0∣θ)=π(1−p)+(1−π)(1−q)∴P(y∣θ)=πpy(1−q)1−y+(1−π)qy(1−p)1−y
设
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
n
)
T
,
Z
=
(
z
1
,
z
2
,
.
.
.
,
z
n
)
T
Y=(y_1,y_2,...,y_n)^T,Z=(z_1,z_2,...,z_n)^T
Y=(y1,y2,...,yn)T,Z=(z1,z2,...,zn)T
∵
P
(
y
∣
θ
)
=
∑
Z
P
(
y
,
z
∣
θ
)
=
∑
Z
P
(
y
,
z
,
θ
)
P
(
θ
)
=
∑
Z
P
(
z
∣
θ
)
P
(
y
∣
z
,
θ
)
\begin{aligned} \because P(y\mid \theta)=\sum_ZP(y,z\mid\theta)=\sum_Z\frac{P(y,z,\theta)}{P(\theta)}=\sum_ZP(z\mid\theta)P(y\mid z,\theta)\\ \end{aligned}
∵P(y∣θ)=Z∑P(y,z∣θ)=Z∑P(θ)P(y,z,θ)=Z∑P(z∣θ)P(y∣z,θ)
P ( Y ∣ θ ) = ∑ Z P ( z ∣ θ ) P ( Y ∣ z , θ ) = ∏ j = 1 n [ π p y j ( 1 − p ) 1 − y j + ( 1 − π ) q y j ( 1 − q ) 1 − y j ] \begin{aligned} P(Y\mid\theta)=&\sum_ZP(z\mid\theta)P(Y\mid z,\theta)\\=&\prod_{j=1}^{n}[\pi p^{y_j}(1-p)^{1-y_j}+(1-\pi)q^{y_j}(1-q)^{1-y_j}] \end{aligned} P(Y∣θ)==Z∑P(z∣θ)P(Y∣z,θ)j=1∏n[πpyj(1−p)1−yj+(1−π)qyj(1−q)1−yj]
log-likelihood:
l
(
θ
)
=
log
P
(
Y
∣
θ
)
=
∑
j
=
1
n
log
[
π
p
y
j
(
1
−
p
)
1
−
y
j
+
(
1
−
π
)
q
y
j
(
1
−
q
)
1
−
y
j
]
l(\theta)=\log P(Y\mid \theta)=\sum_{j=1}^{n}\log [\pi p^{y_j}(1-p)^{1-y_j}+(1-\pi)q^{y_j}(1-q)^{1-y_j}]
l(θ)=logP(Y∣θ)=j=1∑nlog[πpyj(1−p)1−yj+(1−π)qyj(1−q)1−yj]
E-step:
Q
(
θ
∣
θ
(
i
)
)
=
E
Z
[
log
P
(
Y
,
Z
∣
θ
)
∣
Y
,
θ
(
i
)
]
=
∑
Z
[
(
log
P
(
Y
,
Z
∣
θ
)
)
P
(
Z
∣
Y
,
θ
(
i
)
)
]
=
[
P
(
z
=
1
∣
Y
,
θ
(
i
)
)
log
P
(
Y
,
z
=
1
∣
θ
)
+
P
(
z
=
0
∣
Y
,
θ
(
i
)
)
log
P
(
Y
,
z
=
0
∣
θ
)
]
=
∑
j
=
1
n
[
P
(
z
=
1
∣
y
j
,
θ
(
i
)
)
log
P
(
y
j
,
z
=
1
∣
θ
)
+
P
(
z
=
0
∣
y
j
,
θ
(
i
)
)
log
P
(
y
j
,
z
=
0
∣
θ
)
]
\begin{aligned} Q(\theta\mid\theta^{(i)})=&E_Z[\log P(Y,Z\mid\theta)\mid Y,\theta^{(i)}]\\=&\sum_Z[(\log P(Y,Z\mid\theta))P(Z\mid Y,\theta^{(i)})]\\=&[P(z=1|Y,\theta^{(i)})\log P(Y,z=1\mid\theta)+P(z=0\mid Y,\theta^{(i)})\log P(Y,z=0\mid\theta)]\\=&\sum_{j=1}^n[P(z=1|y_j,\theta^{(i)})\log P(y_j,z=1\mid\theta)+P(z=0\mid y_j,\theta^{(i)})\log P(y_j,z=0\mid\theta)] \end{aligned}
Q(θ∣θ(i))====EZ[logP(Y,Z∣θ)∣Y,θ(i)]Z∑[(logP(Y,Z∣θ))P(Z∣Y,θ(i))][P(z=1∣Y,θ(i))logP(Y,z=1∣θ)+P(z=0∣Y,θ(i))logP(Y,z=0∣θ)]j=1∑n[P(z=1∣yj,θ(i))logP(yj,z=1∣θ)+P(z=0∣yj,θ(i))logP(yj,z=0∣θ)]
设在模型参数为
θ
(
i
)
\theta^{(i)}
θ(i) 下观测数据
y
j
y_j
yj 来自 B 的概率为
μ
j
\mu_j
μj
∴
μ
j
(
i
+
1
)
=
P
(
z
=
1
∣
y
j
,
θ
(
i
)
)
=
π
(
i
)
(
p
(
i
)
)
y
j
(
1
−
p
(
i
)
)
1
−
y
j
π
(
i
)
(
p
(
i
)
)
y
j
(
1
−
p
(
i
)
)
1
−
y
j
+
(
1
−
π
(
i
)
)
(
q
(
i
)
)
y
j
(
1
−
q
(
i
)
)
1
−
y
j
\therefore \mu_j^{(i+1)}=P(z=1\mid y_j,\theta^{(i)})=\frac{\pi^{(i)} (p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}}{\pi^{(i)} (p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}+(1-\pi^{(i)})(q^{(i)})^{y_j}(1-q^{(i)})^{1-y_j}}
∴μj(i+1)=P(z=1∣yj,θ(i))=π(i)(p(i))yj(1−p(i))1−yj+(1−π(i))(q(i))yj(1−q(i))1−yjπ(i)(p(i))yj(1−p(i))1−yj
∵ P ( y j , z = 1 ∣ θ ) = π p y j ( 1 − p ) 1 − y j \because P(y_j,z=1\mid\theta)=\pi p^{y_j}(1-p)^{1-y_j} ∵P(yj,z=1∣θ)=πpyj(1−p)1−yj
∴ Q ( θ ∣ θ ( i ) ) = ∑ j = 1 n { μ j ( i + 1 ) log [ π p y j ( 1 − p ) ( 1 − y j ) ] + ( 1 − μ j ( i + 1 ) ) log [ ( 1 − π ) q y j ( 1 − q ) ( 1 − y j ) ] } \therefore Q(\theta\mid\theta^{(i)})=\sum_{j=1}^n\{\mu_j^{(i+1)}\log [\pi p^{y_j}(1-p)^{(1-y_j)}]+(1-\mu_j^{(i+1)})\log[(1-\pi)q^{y_j}(1-q)^{(1-y_j)}] \} ∴Q(θ∣θ(i))=j=1∑n{μj(i+1)log[πpyj(1−p)(1−yj)]+(1−μj(i+1))log[(1−π)qyj(1−q)(1−yj)]}
M-step:计算模型参数行的估计值 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)
求
π
\pi
π:
令
∂
Q
(
θ
∣
θ
(
i
)
)
∂
π
=
0
∴
π
(
i
+
1
)
=
1
n
∑
j
=
1
n
μ
j
(
i
+
1
)
令\frac{\partial Q(\theta\mid\theta^{(i)})}{\partial\pi}=0\\ \therefore \pi^{(i+1)}=\frac{1}{n}\sum_{j=1}^n\mu_j^{(i+1)}
令∂π∂Q(θ∣θ(i))=0∴π(i+1)=n1j=1∑nμj(i+1)
求
p
p
p:
令
∂
Q
(
θ
∣
θ
(
i
)
)
∂
p
=
0
∴
p
(
i
+
1
)
=
∑
j
=
1
n
μ
j
(
i
+
1
)
y
j
∑
j
=
1
n
μ
j
(
i
+
1
)
令\frac{\partial Q(\theta\mid\theta^{(i)})}{\partial p}=0\\ \therefore p^{(i+1)}=\frac{\sum_{j=1}^n\mu_j^{(i+1)}y_j}{\sum_{j=1}^n\mu_j^{(i+1)}}
令∂p∂Q(θ∣θ(i))=0∴p(i+1)=∑j=1nμj(i+1)∑j=1nμj(i+1)yj
求
q
q
q:
令
∂
Q
(
θ
∣
θ
(
i
)
)
∂
q
=
0
∴
q
(
i
+
1
)
=
∑
j
=
1
n
(
1
−
μ
j
(
i
+
1
)
)
y
j
∑
j
=
1
n
(
1
−
μ
j
(
i
+
1
)
)
令\frac{\partial Q(\theta\mid\theta^{(i)})}{\partial q}=0\\ \therefore q^{(i+1)}=\frac{\sum_{j=1}^n(1-\mu_j^{(i+1)})y_j}{\sum_{j=1}^n(1-\mu_j^{(i+1)})}
令∂q∂Q(θ∣θ(i))=0∴q(i+1)=∑j=1n(1−μj(i+1))∑j=1n(1−μj(i+1))yj
import numpy
import math
class EM:
def __init__(self, prob):
self.prob_A, self.prob_B, self.prob_C = prob
# e-step
def expectation(self, j):
'''
计算出对于每一个y_j来自B的概率\mu_j
'''
prob_1 = self.prob_A * math.pow(self.prob_B, data[j]) * math.pow(1 - self.prob_B, 1 -data[j]) # B,即 z=1
prob_0 = (1 - self.prob_A) * math.pow(self.prob_C, data[j]) * math.pow(1 - self.prob_C, 1- data[j]) # C,即 z=0
return prob_1 / (prob_1 + prob_0) # 返回 \mu_j
# m-step
def maximization(self, data):
count = len(data) # n
print('init prob:{},{},{}'.format(self.prob_A, self.prob_B, self.prob_C))
for d in range(count):
_ = yield
mu = [self.expectation(j) for j in range(count)] # 得到\mu向量
prob_A = 1 / count * sum(mu) # 计算新的 \pi
prob_B = sum([mu[j] * data[j] for j in range(count)]) / sum([mu[j] for j in range(count)]) # 计算新的 p
prob_C = sum([(1 - mu[j]) * data[j] for j in range(count)]) / sum([(1 - mu[j]) for j in range(count)]) # 计算新的 q
print('{}/{} prob_A:{:.3f}, prob_B:{:.3f}, prob_C:{:.3f}'.format(d, count, prob_A, prob_B, prob_C))
self.prob_A = prob_A # 赋值
self.prob_B = prob_B # 赋值
self.prob_C = prob_C # 赋值
data = [1, 1, 0, 1, 0, 0, 1, 0, 1, 1] # 可观测数据集 Y
em = EM(prob=[0.5, 0.5, 0.5])
f = em.maximization(data)
next(f)
f.send(1)
f.send(2)
em = EM(prob=[0.4, 0.6, 0.7])
f = em.maximization(data)
next(f)
f.send(1)
f.send(2)
参考资料
西瓜书 p162
统计学习方法 第九章