解决含有隐变量的问题有很多种方法,今天循序渐进地说几个最基本的,其中第四种方法就是通常所说的em算法。下面以统计学习方法中给出的三硬币问题为例来分别描述这三种方法。(a,b,c三硬币抛出来为正的概率分别为pai,p,q,每轮抛硬币先抛a硬币,a为正则抛b硬币,a为反则抛c硬币。把b硬币或者c硬币的结果(正或反)作为最终结果,即样观测值。)
第一种方法:
现在我们只知道样本的观测值集合,我们可以以每一个样本观测值(例如y1=1)为一个单位单独考察。在这种方法之下,我们并不关注pai的值是多少,即抛出a为正的概率,只关注与该样本观测值相对应的抛的那次a硬币的结果究竟是正还是反,只要知道了它的正反,我们就可以知道本次的观测值究竟是b抛出来的还是c抛出来的。我们先给p、q赋一个初值,使用的方法也可以算是最大似然估计,就是我分别假设a抛出的是正面或反面,然后分别计算在a是正面和a是反面的时候有多大的可能性会抛出该观测值。如果假定a是正面时出现当前观测值的概率更大,我们就把该次的a认定为正面,反之则认定为反面。使用这种方法可以分别定义每个样本观测值对应的a是正面还是反面。计算出a为正面时对应的观测值中有多少为正有多少为反,就能根据最大似然估计得出p值和q值。然而这种方法实际上是行不通的,因为如果初始值p=q,则无法判断结果是哪个抛出来的;如果初始值p>q,则所有正面都会被认为是p抛出来的,所有反面都会被认为是q抛出来的,这样最后计算出来p、q的值就会分别为1和0,显然不行;p<q时同理,计算出来p、q的值就会分别为0和1,也不行。
第二种方法:
也就是统计学习方法p156页用到的方法。该方法第一个方法的相同点就是都是以每一个观测值作为一个单元单独考察,不同就在于首先分别通过假设的方法给出pai、p、q的初值。这样就可以通过贝叶斯公式计算出p(z|y)。(即统计学习方法p156页9.5,看红字部分即可方便理解)也就是说在当前观测值对应的a为正和a为反的概率都能求出来。然后分别使用统计学习方法156页的9.6~9.8三个公式(可参考p157红色部分)
(也就是分别令新的pai,p,q这三个概率为该概率在当前情况下的期望,具体的:pai的期望就是每个样本对应抛的硬币a朝上的概率(即p(z=1|Y=y)之和除以抛硬币a的次数(即样本观测值个数)。p的期望的式子中分子的含义是由硬币b产生的观测值中值为1(即抛硬币结果为正)的观测值的数量,分母为由硬币c产生的观测值的数量(即抛b硬币的次数)。。。具体解释:p的期望就是每个观测值(1代表正)分别乘上该观测值是抛硬币b的出来的概率(即p(z=1|Y=y),这个相当于每个观测值在求p的期望时的权重),然后都加起来,最后除以每个观测值是由抛硬币b得到的概率之和。q的期望的计算方法和p的相同。)
就能计算出新一轮的pai,p,q的值。就可以进行新一轮的迭代。
第三种方法(统计学习方法p157上面的em算法是对这个方法的改进):
先列出整个样本集合的观测值共同出现的概率的计算公式,然后把这个计算公式前面加上log,转化为对数最大似然估计估计函数。
然后:
(1)固定p、q,把pai作为未知数对最大似然函数求极值,该极值对应的pai即为新一轮的pai(在第一轮刚好知道知道p,q,不知道pai)。
(2)固定pai,q,以p作为最大似然函数的未知数求极值,得到新一轮的p。
(3)固定pai,p,以q作为最大似然函数的未知数求极值,得到新一轮的q。
之后不断重复上面的(1),(2),(3)(m步),直到收敛为止。
附:对数似然函数的推导(见下图)
第四种方法(em):
第三种方法存在一个缺点,那就是上一种方法里面的对数似然函数L不易求极值,因为里面包含和的对数。这样一来就需要想办法改进。可以采用梯度下降法,也可以采用em算法,思路如下:如果在每次迭代出新的pai,p,q的值之后都能列出一个同样是关于pai,p,q的函数Q,满足只要Q(ξ1)>Q(ξ),就一定有L(ξ1)>L(ξ),那么我就可以每次求出一个能使Q增大的新的参数值,也就你能同时保证L增大了,这样我们让L增大的目标就实现了。经证明,令Q为等于为统计学习方法p157页.9.9的形式就能确保上述假设成立。该方法的步骤如下:
(1)选择pai,p,q的初值。
(2)e步:将初值(第一次执行e步的时候带的是初值,执行第n次e步带入的就是第n-1次迭代求出来的参数值)带入求p(z|y)的公式,算出p(z|y),并把算出来的p(z|y)的值作为常数带入Q式中。
(3)求出使Q极大化的参数值,并将其作为本轮迭代产生的新的参数值。
(4)重复上面两步直到收敛。