参考于 em算法实例讲解,值得推荐 - zhwa - 博客园
有两枚硬币A和B,假定随机抛掷后正面朝上概率分别为PA,PB。为了估计这两个硬币朝上的概率,咱们轮流抛硬币A和B,每一轮都连续抛5次,总共5轮:
硬币 | 结果 | 统计 |
A | 正正反正反 | 3正2反 |
B | 反反正正反 | 2正3反 |
A | 正反反反反 | 1正4反 |
B | 正反反正正 | 3正2反 |
A | 反正正反反 | 2正3反 |
硬币A被抛了15次,在1、3、5轮分别出现了3正、1正、2正,计算出 PA =(3+1+2)/ 15 = 0.4 ;类似地,可计算出 PB=(2+3)/10 = 0.5。
但如果我们不知道抛的硬币是A还是B呢(即硬币种类是隐变量),然后再轮流抛五轮,得到如下结果:
硬币 | 结果 | 统计 |
Unknown | 正正反正反 | 3正2反 |
Unknown | 反反正正反 | 2正3反 |
Unknown | 正反反反反 | 1正4反 |
Unknown | 正反反正正 | 3正2反 |
Unknown | 反正正反反 | 2正3反 |
我们不妨这样,先随便给PA和PB赋一个值,比如:硬币A正面朝上的概率 PA = 0.2,硬币B正面朝上的概率 PB = 0.7。
然后,我们看看第一轮抛掷最可能是哪个硬币。
如果是硬币A,得出3正2反的概率为 0.2*0.2*0.2*0.8*0.8 = 0.00512
如果是硬币B,得出3正2反的概率为 0.7*0.7*0.7*0.3*0.3=0.03087
然后依次求出其他4轮中的相应概率。表格如下:
轮数 | 结果统计 | 若是硬币A | 若是硬币B |
1 | 正正反正反 | 0.2*0.2*0.2*0.8*0.8 = 0.00512 | 0.7*0.7*0.7*0.3*0.3 = 0.03087 |
2 | 反反正正反 | 0.2*0.2*0.8*0.8*0.8 = 0.02048 | 0.7*0.7*0.3*0.3*0.3 = 0.01323 |
3 | 正反反反反 | 0.2*0.8*0.8*0.8*0.8 = 0.08192 | 0.7*0.3*0.3*0.3*0.3 = 0.00567 |
4 | 正反反正正 | 0.2*0.2*0.2*0.8*0.8 = 0.00512 | 0.7*0.7*0.7*0.3*0.3 = 0.03087 |
5 | 反正正反反 | 0.2*0.2*0.8*0.8*0.8 = 0.02048 | 0.7*0.7*0.3*0.3*0.3 = 0.01323 |
按照最大似然法则: 第1轮中最有可能的是硬币B,第2轮中最有可能的是硬币A,第3轮中最有可能的是硬币A,第4轮中最有可能的是硬币B,第5轮中最有可能的是硬币A 。
我们就把概率更大,即更可能是A的,即第2、3、5轮出现正的次数2、1、2相加,除以A被抛的总次数15(A抛了三轮,每轮5次),得到PA的估计值 PA = (2+1+2)/15 = 0.33。同理可计算得到 PB =(3+3)/10 = 0.6。
设想我们是全知的神,知道每轮抛掷时的硬币就是如本文开头那样,PA=0.4,PB=0.5(下文中将这两个值称为PA和PB的真实值)。那么对比下我们初始化的PA和PB和新估计出的PA和PB:
初始化的PA | 估计的PA | 真实的PA | 初始化的PB | 估计的PB | 真实的PB |
0.2 | 0.33 | 0.4 | 0.7 | 0.6 | 0.5 |
可见,我们估计的PA和PB相比于它们的初始值,更接近它们的真实值了!就这样,不断迭代 不断接近真实值,这就是EM算法的奇妙之处。
可以期待,我们继续按照上面的思路,用估计出的PA和PB再来估计每轮抛的是硬币A还是B,再据此估计新的PA和PB,反复迭代下去,就可以最终得到PA = 0.4,PB=0.5,此时无论怎样迭代,PA和PB的值都会保持0.4和0.5不变,于是我们就找到了PA和PB的最大似然估计。