EM算法(期望最大算法、Expectation Maximization Algorithm)
引言
EM算法,全称为期望最大(Expectation Maximization)算法,是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然估计方法。
我们采用Nature Biotech中EM tutorial中掷硬币的例子来对EM算法进行一个具体化的解释。
我们假设有两枚硬币A与B,他们随机抛掷的结果如图,当我们知道了每次抛的是A还是B就可以直接进行估计。
那么根据图中的计算,我们可以得到,两枚硬币抛出正面的概率分别为 θ ^ A = 0.80 \hat \theta_A = 0.80 θ^A=0.80, θ ^ B = 0.45 \hat \theta_B = 0.45 θ^B=0.45
但如果此时不知道抛掷的硬币是A还是B,也就是隐藏了图中表格里的Coin A
和Coin B
,将所有结果存到一列表格中。此时相当于添加了隐变量。只能观测到5轮循环,每轮循环10次,共计50次投币。这个时候就无法直接估计A和B的正面概率,因为不知道哪一轮循环是哪个硬币投掷的。最后,图中的表格就变为下面的形式:
Coin | Statistics |
---|---|
Unknown | 5H,5T |
Unknown | 9H,1T |
Unknown | 8H,2T |
Unknown | 4H,6T |
Unknown | 7H,3T |
此时我们的目标没有变,仍旧是估计A和B正面的概率。虽然此时我们失去了A和B的标号,但是我们多了一个硬币种类的隐变量,设为Z,Z是一个5维的向量,可以表示为:
Z = ( z 1 , z 2 , z 3 , z 4 , z 5 ) Z=(z_1,z_2,z_3,z_4,z_5) Z=(z1,z2,z3,z4,z5),代表每一轮所使用的硬币。但是,对于Z并不知晓,就无法去估计 θ A \theta_A θA和 θ B \theta_B θB,那么我们就必须先得出Z,然后才能进一步估计P(A)和P(B),要得出Z又必须先知道 θ A \theta_A θA和 θ B \theta_B θB,然后采用最大似然去预测,那么就会陷入一个死循环。
为了解决上述问题,我们可以先随机初始化 θ A \theta_A θA和 θ B \theta_B θB,然后去估计Z,基于估计出来的Z按照最大似然去估计新的 θ A \theta_A θA和 θ B \theta_B θB,直至最后收敛,这就是EM算法的思想,下图给出了E-step和M-step。
下面计算引用【机器学习】EM——期望最大(非常详细)
随机初始化 θ A = 0.6 \theta_A = 0.6 θA=0.6 和 θ B = 0.5 \theta_B = 0.5 θB=0.5,那么第一轮循环中,如果Unknown的硬币是A,得出5H5T的概率就是 0. 6 5 ∗ 0. 4 5 0.6^5*0.4^5 0.65∗0.45;如果是B,概率为 0. 5 5 ∗ 0. 5 5 0.5^5*0.5^5 0.55∗0.55。那么就有,Unknown为硬币A和B的概率分别是
P A = 0. 6 5 ∗ 0. 4 5 0. 6 5 ∗ 0. 4 5 + 0. 5 5 ∗ 0. 5 5 = 0.45 P B = 0. 5 5 ∗ 0. 5 5 0. 6 5 ∗ 0. 4 5 + 0. 5 5 ∗ 0. 5 5 = 0.55 P_A = \frac{0.6^5*0.4^5}{0.6^5*0.4^5+0.5^5*0.5^5} = 0.45\\ P_B = \frac{0.5^5*0.5^5}{0.6^5*0.4^5+0.5^5*0.5^5 } = 0.55 PA=0.65∗0.45+0.55∗0.550.65∗0.45=0.45PB=0.65∗0.45+0.55∗0.550.55∗0.55=0.55
5个轮次我们都依照上面进行计算,可以得到如下情况
Coin A | Coin B |
---|---|
0.45 | 0.55 |
0.80 | 0.20 |
0.73 | 0.27 |
0.35 | 0.65 |
0.65 | 0.35 |
这一步对应了E-step
结合硬币A的概率和上面的投掷结果情况,我们可以利用期望求出硬币A和硬币B的贡献。
Coin | Statistics |
---|---|
Unknown | 5H,5T |
Unknown | 9H,1T |
Unknown | 8H,2T |
Unknown | 4H,6T |
Unknown | 7H,3T |
Coin A | Coin B |
---|---|
0.45 | 0.55 |
0.80 | 0.20 |
0.73 | 0.27 |
0.35 | 0.65 |
0.65 | 0.35 |
以第一轮硬币A为例,计算方式为:
H : 0.45 ∗ 5 = 2.25 T : 0.45 ∗ 5 = 2.25 H:0.45*5 = 2.25 T:0.45*5 = 2.25 H