一个简单的例子
在讲EM算法之前,我们先看一个简单的例子。假设我们有两个硬币,分别叫A和B,A和B不是一般的硬币,它们投掷出正面和反面的概率是不一定一样的,我们假设A和B投掷出正面的概率分别是 θA 和 θB 。
现在我们重复下面的过程5次:
- 从A和B中随机取1枚出来
- 将选出的硬币投掷10次
- 记录投掷出正面的次数
在这之后我们得到了投掷的结果如下表所示:
选中的硬币 | 正面次数 | 反面次数 |
---|---|---|
B | 5 | 5 |
A | 9 | 1 |
A | 8 | 2 |
B | 4 | 6 |
A | 7 | 3 |
我们想通过上面的实验来估计
θA
和
θB
。其实这很简单,针对硬币A来说,总共投掷了30次,投掷出正面的次数为9+8+7=24次,那么我们可以算出A投掷出正面的概率
θA=24/30=0.8
,同理针对硬币B来说,共投掷了20次,投掷出正面的次数为5+4=9次,那么我们可以估计B投掷出正面的概率
θA=9/20=0.45
。
EM算法思想
前面的那个问题很简单,假设我们把问题稍微改变一下,即现在我们只知道每次有几次投掷出正面,但是不知道每次投掷的是哪个硬币,也就是说我们只知道上表中第二列和第三列,那么我们怎么去估计 θA 和 θB 呢?
这个问题其实就是不完整数据的参数估计,为什么不完整呢,因为现在我们只能观察到正面反面,而观察不到是哪个硬币了。我们能观察到的参数叫做可观察变量,我们观察不到的就叫隐含变量。那么到底怎么解决这个问题呢?
- 我们不知道 θA 和 θB 没关系,我们一开始就随便猜, θ(0)A=0.6 , θ(0)B=0.5 。
- 根据这个猜测出的初始值和观测值,我们去估计每次选中A和B的概率。例如第一次投掷5个正面和5个反面,那么如果这个硬币是A,那么投掷出这个结果的概率是 C510θ(0)A5(1−θ(0)A)5=252∗0.07776∗0.01024=0.2007 ,如果这个硬币是B,那么投掷出这个结果的概率是 C510θ(0)B5(1−θ(0)B)5=252∗0.03125∗0.03125=0.2461 。所以这枚硬币是A的概率是 0.2007/(0.2007+0.2461)=0.449≈0.45 ,我们记为 Q(A) ,而这枚硬币是B的概率是 1−0.45=0.55 ,我们记为 Q(B) ,根据我们算出来的 Q(A) , Q(B) ,我们来算投掷硬币的期望,即 Q(A)×5=0.45×5=0.225≈0.22 ,如上图中的表格所示。在得到了所有的期望之后,我们再根据这些期望值,重新推导出A投掷出正面和反面的概率,即 21.3/(21.3+8.4) 得出新一轮的 θA ,同理得出新一轮的 θB 。之后再根据得出的新一轮的 θA 和 θB 再去估计硬币是A或者B的概率,如此重复,直到收敛。这里,根据 θA 和 θB 去估计 Q(A) 和 Q(B) 就是E-step,而根据 Q(A) 和 Q(B) 重新去估计 θA 和 θB 就是M-step,重复E-step,M-step直到收敛就是EM算法的思想。