EM最大期望算法

介绍EM算法,必然会抛出一些比较复杂的公式。其实这些公式只是EM算法思想的数学推导,数学推导就是将算法思想用严谨的公式语言表达出来而已。理解EM算法思想,比看懂它的数学推导重要。
 
EM即最大期望算法(Expectation Maximization algorithm),是在高斯混合模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐性变量。EM算法是解决数学公式的一个算法,很多时候用来求解高斯分布中的均值简单的说就是:给定训练样本{x1,...xm}(与k-means中的样本一样是没有标签的,因此EM也是非监督学习方法),认为他们满足高斯分布N(μ,σ^2), 求估计参数μ。
 
关于高斯混合模型GMM(Gaussian Mixture Model):参考百度百科定义。简单的说就是:m个样本{x1,...xm},可以分为k类,每个类别都服从高斯分布。
关于高斯分布(即正态分布):参考百度百科定义。若随机变量X服从一个数学期望(均值)为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ(标准差是方差的算术平方根)决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
 
EM算法过程:
EM算法是一种迭代型算法,每一次的迭代过程主要分为两步:即E步和M步。
第一步:求期望(Expectation),利用对隐藏变量的现有估计值,计算其最大似然估计值;
第二步:最大化(Maximization),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
简单的说就是:根据事先估计的先验概率A,得出一个结果B,再根据结果B,计算得到A,然后反复。
 
 
典型的硬币示例
已知:
    硬币              结果             统计
       ?            正正反正反     3正-2反
       ?            反反正正反     2正-3反
       ?            正反反反反     1正-4反
       ?           正反反正正     3正-2反
       ?            反正正反反     2正-3反
问题:
硬币有两枚分别记为A、B,求上述5轮结果A、B正面朝上的概率分别是多少?
求解过程:
1.假设两枚硬币正面朝上概率分别为PA、PB,那么反面朝上概率分别为1-PA、1-PB。
2.先随便给PA和PB赋一个值:PA=0.5(A反面概率即1-0.5=0.5);PB=0.7(B反面概率即1-0.7=0.3)。
3.根据步骤2计算每轮抛掷最可能是哪个硬币:
   第一轮:
如果是硬币A,得出3正-2反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
硬币A的概率>硬币B的概率,所以第一轮暂且认为是硬币A抛出的。
   第二轮:
如果是硬币A,得出2正-3反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
   第三轮:
如果是硬币A,得出1正-4反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
如果是硬币B,得出1正-4反的概率为 0.7*0.3*0.3*0.3*0.3 = 0.00567
硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
   第四轮:
如果是硬币A,得出3正-2反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
硬币A的概率>硬币B的概率,所以第四轮暂且认为是硬币A抛出的。
   第五轮:
如果是硬币A,得出2正-3反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
4.根据步骤3的结果来估计新的PA和PB:PA=11/25=0.44、PB=0/0(无解时依然用步骤2的值)。
5.根据步骤4计算每轮抛掷最可能是哪个硬币:
   第一轮:
如果是硬币A,得出3正-2反的概率为 0.44*0.44*0.44*0.56*0.56 = 0.0267137024
如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
硬币A的概率<硬币B的概率,所以第一轮暂且认为是硬币B抛出的。
   第二轮:
如果是硬币A,得出2正-3反的概率为 0.44*0.44*0.56*0.56*0.56 = 0.0339992576
如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
   第三轮:
如果是硬币A,得出1正-4反的概率为 0.44*0.56*0.56*0.56*0.56 = 0.0432717824
如果是硬币B,得出1正-4反的概率为 0.7*0.3*0.3*0.3*0.3 = 0.00567
硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
   第四轮:
如果是硬币A,得出3正-2反的概率为 0.44*0.44*0.44*0.56*0.56 = 0.0267137024
如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
硬币A的概率<硬币B的概率,所以第四轮暂且认为是硬币B抛出的。
   第五轮:
如果是硬币A,得出2正-3反的概率为 0.44*0.44*0.56*0.56*0.56 = 0.0339992576
如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
6.根据步骤5的结果来估计新的PA和PB:PA=5/15=0.3333、PB=6/10=0.6。
7.根据步骤6计算每轮抛掷最可能是哪个硬币:
   第一轮:
如果是硬币A,得出3正-2反的概率为 0.3333*0.3333*0.3333*0.6667*0.6667= 0.01645
如果是硬币B,得出3正-2反的概率为 0.6*0.6*0.6*0.4*0.4 = 0.03456
硬币A的概率<硬币B的概率,所以第一轮暂且认为是硬币B抛出的。
   第二轮:
如果是硬币A,得出2正-3反的概率为 0.3333*0.3333*0.6667*0.6667*0.6667= 0.03292
如果是硬币B,得出2正-3反的概率为 0.6*0.6*0.4*0.4*0.4 = 0.02304
硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
   第三轮:
如果是硬币A,得出1正-4反的概率为 0.3333*0.6667*0.6667*0.6667*0.6667= 0.06585
如果是硬币B,得出1正-4反的概率为 0.6*0.4*0.4*0.4*0.4 = 0.01536
硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
   第四轮:
如果是硬币A,得出3正-2反的概率为 0.3333*0.3333*0.3333*0.6667*0.6667= 0.01645
如果是硬币B,得出3正-2反的概率为 0.6*0.6*0.6*0.4*0.4 = 0.03456
硬币A的概率<硬币B的概率,所以第四轮暂且认为是硬币B抛出的。
   第五轮:
如果是硬币A,得出2正-3反的概率为 0.3333*0.3333*0.6667*0.6667*0.6667= 0.03292
如果是硬币B,得出2正-3反的概率为 0.6*0.6*0.4*0.4*0.4 = 0.02304
硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
8.步骤7和步骤5的结果一样,认为达到收敛状态,PA和PB也维持:PA=5/15=0.3333、PB=6/10=0.6。
 
上述是EM初级版的解答,存在一个问题:
迭代一定会收敛到真实的PA和PB吗?
不一定,取决于PA和PB的初始化值。
 
所以在EM初级版上有进阶版:PA和PB的初始化值考虑所有可能。
具体步骤可以参考https://www.jianshu.com/p/1121509ac1dc
 
 
posted @ 2019-10-27 10:43  数之美  阅读(485)  评论(0编辑  收藏  举报