分享

概率图模型——EM算法

 吴敬锐 2019-10-15

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多