一个简单的例子
在讲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算法的思想。