如果你在数据科学领域还只是个新手,那么建议你先看看——《五本书带你入门数据科学》,入门后,再学习《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,是因为我们幸运地找到了好的初始化值。 |
|