如果你在数据科学领域还只是个新手,那么建议你先看看——《五本书带你入门数据科学》,入门后,再学习《R语言案例实战》。
概率图模型系列文章:
EM算法
EM算法,指的是最大期望算法(Expectation Maximization Algorithm,又译期望最大化算法),是一种迭代算法,在统计学中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。
前面我们讲到了MLE极大似然估计,知道了如果连续抛 5 次硬币, 3 次正面朝上, 2 次反面朝上,那么正面朝上的概率就是 3/5 。下面我们来升级一下这个问题。
隐变量
假设现在有两枚 硬币1 和 硬币2,,随机抛掷后正面朝上概率分别为 P1,P2。为了估计这两个概率,做实验,每次取一枚硬币,连掷 5 下,记录下结果,如下表所示:
这时候,根据最大似然估计,可以很容易地估计出 P1 和 P2,如下所示:
P1 = (3+1+2)/ 15 = 0.4
P2 = (2+3)/ 10 = 0.5
现在我们抹去每轮投掷时使用的硬币标记,也就是,扔出去的硬币,我们不知道是第一枚还是第二枚了,数据如下所示:
现在我们的目标没变,还是估计 P1 和 P2,要怎么做呢?
问题分析
显然,此时我们多了一个隐变量 z ,可以把它认为是一个 5 维的向量(z1, z2, z3, z4, z5),代表每次投掷时所使用的硬币是1还是2。
但是,这个变量 z 不知道,就无法去估计 P1 和 P2 ,所以,我们必须先估计出 z ,然后才能进一步估计 P1 和 P2。
但要估计 z,我们又得知道 P1 和 P2,这样我们才能用最大似然概率法则去估计 z ,这不是鸡生蛋和蛋生鸡的问题了吗,如何破?
在机器学习的算法中,遇上这种互相依赖的问题,一般会使用随机的方法,先随机初始化未知的变量,这里就可以随机初始化一个 P1 和 P2 ,用它来估计 z ,然后基于 z ,还是按照最大似然概率法则去估计新的 P1 和 P2。
这时候,如果新估计出来的 P1 和 P2 非常接近,说明我们初始化的 P1 和 P2 是一个相当靠谱的估计,可以停止了!
如果新估计出来的 P1 和 P2 和我们初始化的值差别很大,怎么办呢?就是继续用新的 P1 和 P2 迭代,直至收敛为止。
计算案例
基于上面的分析,我们就先随便给 P1 和 P2 初始化一个值,比如:
P1 = 0.2
P2 = 0.7
然后,我们看看第一轮抛掷最可能是哪个硬币。
如果是硬币1,得出3正2反的概率为 0.2*0.2*0.2*0.8*0.8 = 0.00512
如果是硬币2,得出3正2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
依次求出其他4轮中的相应概率,做成表格如下所示:
按照最大似然法则:
第1轮中最有可能的是硬币2
第2轮中最有可能的是硬币1
第3轮中最有可能的是硬币1
第4轮中最有可能的是硬币2
第5轮中最有可能的是硬币1
我们就把上面的值作为 z 的估计值,然后按照最大似然概率法则来估计新的 P1 和 P2 。
P1 = (2+1+2)/15 = 0.33
P2 = (3+3)/10 = 0.6
根据我们开始已知 z 的时候,计算出来的 P1 和 P2 的最大似然估计就是0.4和0.5,可以看到,重新估算出来的 P1=0.33 和 P2=0.6 ,更加接近它的真实值了。
EM进阶版
接着,我们再来改进一下上面的计算方法。
我们是用最大似然概率法则估计出的 z 值,然后再用 z 值按照最大似然概率法则估计新的 P1 和 P2 。也就是说,我们使用了一个最可能的 z 值,而不是所有可能的 z 值。
如果考虑所有可能的 z 值,对每一个 z 值都估计出一个新的 P1 和 P2 ,将每一个 z 值概率大小作为权重,将所有新的 P1 和 P2 分别加权相加,这样的 P1 和 P2 应该会更好一些。
所有的 z 值有多少个呢?显然,有 2^5 = 32 种,需要我们进行 32 次估值?不需要,我们可以用期望来简化运算。
利用上面这个表,我们可以算出每轮抛掷中使用 硬币1 或者使用 硬币2 的概率。
比如第1轮,使用 硬币1 的概率是:
0.00512/(0.00512+0.03087) = 0.14
使用 硬币2 的概率是:
0.03087/(0.00512+0.03087) = 0.86
依次可以算出其他4轮的概率,如下表所示:
上表中的右两列表示期望值。看第一行,0.86 表示从期望的角度看,这轮抛掷使用 硬币2 的概率是 0.86。相比于前面的方法,我们按照最大似然概率,直接将第1轮估计为用 硬币2,现在改进为,有0.14的概率是 硬币1,有 0.86 的概率是 硬币2,不再是非此即彼,显然这样会更好一些。
这一步,我们实际上是估计出了 z 的概率分布,这步被称作E步。
结合下表:
我们按照期望最大似然概率的法则来估计新的 P1 和 P2:
以 P1 估计为例,第 1 轮的 3 正 2 反相当于:
0.14*3 = 0.42 正
0.14*2 = 0.28 反
依次算出其他四轮,列表如下:
综合上面的表格,可以知道:
P1=4.22/(4.22+7.98)=0.35
可以看到,改变了 z 值的估计方法后,新估计出的 P1 要更加接近 0.4。原因就是我们使用了所有抛掷的数据,而不是之前只使用了部分的数据。
这步中,我们根据E步中求出的z的概率分布,依据最大似然概率法则去估计 P1 和 P2,被称作 M 步。
综合上面的讲解,EM算法的过程,可以使用下面这个图片来表达:
注意问题
这里有两个问题:
1、新估计出的 P1 和 P2 一定会更接近真实的 P1 和 P2 ?
没错,一定会更接近真实的 P1 和 P2,数学可以证明。
2、迭代一定会收敛到真实的 P1 和 P2 吗?
不一定,取决于 P1 和 P2 的初始化值,上面我们之所以能收敛到 P1 和 P2,是因为我们幸运地找到了好的初始化值。
联系客服