EM算法是极大似然解的一种算法。当使用基于极大似然估计的模型时,模型中存在隐变量,就要用到EM算法进行参数估计。
以投硬币为例说明:
现有两枚硬币1和2,随机投掷正面朝上的概率是P1和P2,然后为了估计这两个概率做了上面的实验,我们可以很容易得出
P1 = (3+1+2)/15 = 0.4
p2 = (2+3)/10 = 0.5
为了使用我们的EM算法,我们加入隐变量,即还是上面的实验,但是我们抹去每轮投掷的硬币标记,继续求P1和P2
这时我们怎么做呢?先随机初始化一个P1和P2,拿这个去估计新加入的隐变量z,这里可以认为是一个5维的向量(z1,z2,z3,z4,z5)
假设P1 = 0.2,P2 = 0.7,对于第一轮投掷,硬币1得到3正2反的概率是(0.2)^3 * (0.7)^2 = 0.00512, 硬币2得到3正2反的概率是(0.7)^3 * (0.3)^2 = 0.03087
重复上面操作得到5轮的概率,根据最大似然法则z应该是(2,1,1,2,1),然后根据新得到的z回去计算P1和P2,得到0.33和0.6,可以看出进一步逼近了真实的0.4和0.5。这样重复计算不断接近真实概率,但最后能不能收敛取决于我们给的初值。
EM算法的完全版则是,在用z估计P1和P2时加入权重:
0.14 = 0.00512 / (0.00512 + 0.03087)
这一步计算z的概率分布就是EM算法的E(Expectation)步,我们现在认为第一轮有0.14的概率是硬币1,0.86的概率是硬币2,而不是之前的非此即彼。
此时我们按照最大似然法则估计P1和P2,得(以估计P1为例):
第一轮三正两反:0.14 * 3 = 0.42 0.14 * 2 = 0.28
P1 = 4.22 / (4.22 + 7.98) = 0.35
由E步得到的z去用最大似然法则估计P1和P2,就是M(Maximization)步。
这么估计出来的P1和P2比之前要更接近真实的P1和P2。
参考:https://www.jianshu.com/p/1121509ac1dc