EM算法
概率模型有时既含有观测变量(observable vriable),又含有隐变量或潜在变量(latent variable)。如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。
EM算法[Dempster, 1977]是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望(expectation);M步,求极大(maximization)。所以这一算法称为期望极大算法(expectation maximization algorithm,EM)
1 EM 算法
import numpy as np
def e_step(y, pi, p, q):
mu_1 = pi * p ** y * (1 - p) ** (1 - y)
mu_2 = (1 - pi) * q ** y * (1 - q) ** (1 - y)
mu = mu_1 / (mu_1 + mu_2)
return mu
def m_step(y, mu):
n = len(y)
pi = np.sum(mu) / n
p = sum(y * mu) / sum(mu)
q = sum(y * (1 - mu)) / sum(1 - mu)
return pi, p, q
def diff(pi, p, q, pi_, p_, q_):
return np.sum(np.abs([pi - pi_, p - p_, q - q_]))
def em(y, pi, p, q):
cnt = 1
while True:
print("-" * 10)
print("iter %d:" % cnt)
pi_ = pi
p_ = p
q_ = q
mu = e_step(y, pi, p, q)
print(mu)
pi, p, q = m_step(y, mu)
print(pi, p, q)
if diff(pi, p, q, pi_, p_, q_) < 0.001:
break
cnt += 1
return pi, p, q
y = np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 1])
print("*" * 10)
pi = 0.5
p = 0.5
q = 0.5
pi, p, q = em(y, pi, p, q)
print("*" * 10)
pi = 0.4
p = 0.6
q = 0.7
pi, p, q = em(y, pi, p, q)
print("*" * 10)
pi = 0.46
p = 0.55
q = 0.67
pi, p, q = em(y, pi, p, q)
**********
----------
iter 1:
[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
0.5 0.6 0.6
----------
iter 2:
[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
0.5 0.6 0.6
**********
----------
iter 1:
[0.36363636 0.36363636 0.47058824 0.36363636 0.47058824 0.47058824
0.36363636 0.47058824 0.36363636 0.36363636]
0.40641711229946526 0.5368421052631579 0.6432432432432431
----------
iter 2:
[0.36363636 0.36363636 0.47058824 0.36363636 0.47058824 0.47058824
0.36363636 0.47058824 0.36363636 0.36363636]
0.40641711229946526 0.5368421052631579 0.6432432432432431
**********
----------
iter 1:
[0.41151594 0.41151594 0.53738318 0.41151594 0.53738318 0.53738318
0.41151594 0.53738318 0.41151594 0.41151594]
0.461862835113919 0.5345950037850112 0.6561346417857326
----------
iter 2:
[0.41151594 0.41151594 0.53738318 0.41151594 0.53738318 0.53738318
0.41151594 0.53738318 0.41151594 0.41151594]
0.46186283511391907 0.5345950037850112 0.6561346417857326
通常情况, Y Y Y表示观测随机变量的数据, Z Z Z表示隐随机变量的数据。 Y Y Y和 Z Z Z均已知称为完全数据(complete-data),仅有观测数据 Y Y Y称为不完全数据(incomplete-data)。假设给定观测数据 Y Y Y,其概率分布是 P ( Y ; θ ) P(Y; \theta) P(Y;θ),其中 θ \theta θ是需要估计的模型参数,那么不完全数据 Y Y Y的似然函数是 P ( Y ; θ ) P(Y; \theta) P(Y;θ),对数似然函数 L ( θ ) = log P ( Y ; θ ) L(\theta) = \log P(Y; \theta) L(θ)=logP(Y;θ);假设 Y Y Y和 Z Z Z的联合概率分布是 P ( Y , Z ; θ ) P(Y, Z; \theta) P(Y,Z;θ),那么完全数据的对数似然函数是 L ( θ ) = log P ( Y , Z ; θ ) L(\theta) = \log P(Y, Z; \theta) L(θ)=logP(Y,Z;θ)。
EM算法通过迭代求解 L ( θ ) = log P ( Y , Z ; θ ) L(\theta) = \log P(Y, Z ; \theta) L(θ)=logP(Y,Z;θ)的极大似然估计。每次迭代包含两步:E步,求期望;M步,求极大化。
算法9.1(EM算法)
输入:观测变量数据 Y Y Y,隐变量数据 Z Z Z,联合分布 P ( Y , Z ; θ ) P(Y, Z; \theta) P(Y,Z;θ),条件分布 P ( Z ∣ Y ; θ ) P(Z | Y; \theta) P(Z∣Y;θ);
输出:模型参数 θ \theta θ。
-
选择参数初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
-
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 P ( Z ∣ Y ; θ ( i ) ) log P ( Y , Z ; θ ) (9) \begin{aligned} Q(\theta, \theta^{(i)}) & = \text{E}_{Z} \left[ \log P(Y, Z; \theta) | Y; \theta^{(i)} \right] \\ & = \sum_{Z} P(Z | Y; \theta^{(i)}) \log P(Y, Z; \theta) \end{aligned} \tag {9} Q(θ,θ(i))=EZ[logP(Y,Z;θ)∣Y;θ(i)]=Z∑P(Z∣Y;θ(i))logP(Y,Z;θ)(9)
其中, P ( Z ; Y , θ ( i ) ) P(Z; Y, \theta^{(i)}) P(Z;Y,θ(i))是在给定观测数据 Y Y Y和当前的参数估计 θ ( i ) \theta^{(i)} θ(i)下隐变量数据 Z Z Z的条件概率分布;
- 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 ) ) (10) \theta^{(i + 1)} = \argmax_{\theta} Q(\theta, \theta^{(i)}) \tag {10} θ(i+1)=θargmaxQ(θ,θ(i))(10)
- 重复第2步和第3步,直到收敛。
方程(9)的函数 Q ( θ , θ ( i ) ) Q(\theta, \theta^{(i)}) Q(θ,θ(i))是EM算法的核心,称为 Q Q Q函数( Q Q Q function)。
定义9.1(Q函数) 完全数据的对数似然函数 P ( Y , Z ∣ θ ) P(Y, Z | \theta) P(Y,Z∣θ)是关于给定观测数据 Y Y Y和当前参数 θ ( i ) \theta^{(i)} θ(i)下,对未观测数据 Z Z Z条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z | Y, \theta^{(i)}) P(Z∣Y,θ(i))的期望,称为 Q Q Q函数,即
Q ( θ , θ ( i ) ) = E Z [ log P ( Y , Z ; θ ) ∣ Y ; θ