EM算法实例

参考于 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的最大似然估计。

EM算法优缺点

优点:算法简单,稳定上升的步骤能可靠地找到“最优的收敛值”。

缺点:对初始值很敏感;容易得到局部最优解。

你可能感兴趣的:(机器学习)