两枚硬币A和B,假定随机抛掷后正面朝上概率分别为,
。为了估计这两个硬币朝上的概率,咱们轮流抛硬币A和B,每一轮都连续抛5次,总共5轮:
| 硬币 | 结果 | 统计 |
|---|---|---|
| A | 正正反正反 | 3正-2反 |
| B | 反反正正反 | 2正-3反 |
| A | 正反反反反 | 1正-4反 |
| B | 正反反正正 | 3正-2反 |
| A | 反正正反反 | 2正-3反 |
硬币A被抛了15次,在第一轮、第三轮、第五轮分别出现了3次正、1次正、2次正,所以很容易估计出,类似的,
也很容易计算出来,如下:
但是如果我们不知道抛的硬币是A还是B呢(即硬币种类是隐变量),然后再轮流抛五轮,得到如下结果:
| 硬币 | 结果 | 统计 |
|---|---|---|
| Unknown | 正正反正反 | 3正-2反 |
| Unknown | 反反正正反 | 2正-3反 |
| Unknown | 正反反反反 | 1正-4反 |
| Unknown | 正反反正正 | 3正-2反 |
| Unknown | 反正正反反 | 2正-3反 |
现在我们的目标仍然是估计和
,此时需要怎么做呢?
显然,此时我们多了一个硬币种类的隐变量,设为
,可以把它认为是一个5维的向量
,代表每次投掷时所使用的硬币,比如
,就代表第一轮投掷时使用的硬币是A还是B。
- 但是,这个变量
不知道,就无法去估计
和
,所以,我们必须先估计出
,然后才能进一步估计
和
。
- 可要估计
,我们又得知道
和
,这样我们才能估计
,现在我们好像陷入了一个死循环中,如何解决这个问题呢?
我们可以这样来做
- 先随机初始化一个
和
,用它来估计
。
- 然后基于
,去估计新的
和
,如果新的
和
与我们初始化的
和
一样或者相差很小,这就说明我们最开始的估计是比较靠谱的。
- 如果新估计出来的
和
与我们初始化的值差别很大,就继续更新
,然后再用
继续更新
和
,直至收敛。
那我们就把刚才的推理部分实践一下。我们不妨这样,先随便给和
赋一个值,比如:
硬币A正面朝上的概率
硬币B正面朝上的概率
然后,我们看看第一轮抛掷最可能是哪个硬币。
如果是硬币A,得出3正2反的概率为
如果是硬币B,得出3正2反的概率为
然后依次求出其他4轮中的相应概率。做成表格如下(标粗表示其概率更大):
| 轮数 | 若是硬币A | 若是硬币B |
|---|---|---|
| 1 | 0.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反 | 0.03087,3正-2反 |
| 2 | 0.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反 | 0.01323,2正-3反 |
| 3 | 0.08192,即0.2 0.8 0.8 0.8 0.8,1正-4反 | 0.00567,1正-4反 |
| 4 | 0.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反 | 0.03087,3正-2反 |
| 5 | 0.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反 | 0.01323,2正-3反 |
按照最大似然法则:
- 第1轮中最有可能的是硬币B,也就意味着
- 第2轮中最有可能的是硬币A,也就意味着
- 第3轮中最有可能的是硬币A,也就意味着
- 第4轮中最有可能的是硬币B,也就意味着
- 第5轮中最有可能的是硬币A,也就意味着
然后我们根据的结果,便可以估计新的
和
了。
现在我们对比一下,我们初始化的和
和新估计出的
和
以及真实的
和
:
| 初始化的$P_A$ | 估计出的$P_A$ | 真实的$P_A$ | 初始化的$P_B$ | 估计出的$P_B$ | 真实的$P_B$ |
|---|---|---|---|---|---|
| 0.2 | 0.33 | 0.4 | 0.7 | 0.6 | 0.5 |
通过一次更新迭代,我们估计的和
相比于它们的初始值,向真实情况迈进了一步!就这样,不断迭代不断接近真实值,这就是EM算法的奇妙之处。
