EM算法详解

我们先来看一下极大似然估计,所谓的极大似然估计就是找出与样本分布最接近的概率分布模型。比如说我们抛10次硬币,它的结果是正正反正正正反反正正,假设p是每次抛硬币结果为正的概率,那么所得实验结果的概率就是

                                                      P=pp(1-p)ppp(1-p)(1-p)pp=p^7(1-p)^3

再对其取对数会得到这么一个东西:

                                                                     f(n|p)=log(p^n(1-p)^{N-n})

把它看作是p的函数就变成了:h(p),对p求偏导得到:

                                                               \frac{\varphi h(p)}{\varphi p}=\frac{n}{p}-\frac{N-n}{1-p}

然后令导数为零得到p=\frac{N}{n}。上面的例子是二项分布的,下面来看一下如果是高斯会怎么样:

                               

分别对u和sigma求偏导得出了这样的结论:

              

我们对均值的估计其实就是样本的均值,对方差的估计其实就是样本的伪方差。

下面我们就利用这样一些结论作为我们分析问题的基础,给出这样一个问题:

随机挑选10000个志愿者,并测量出了他们的身高,样本中有男性也有女性,并且已知有6000个男性和4000个女性,身高分别服从N(u_{1},\sigma_{1})N(u_{2},\sigma_{2})的分布,试估计u_{1},\sigma_{1},u_{2},\sigma_{2}。这个问题实际在做的时候还是有点麻烦的,但是如果已经事先知道男性有多少,女性有多少的时候,是比较好算的,直接带入上面的公式就行了。但现在我问题是不知道有多少男性,多少女性,以及男性和女性的数据分别是多少,现在是把他们混在一起了。这是一个高斯模型,但这高斯模型是一个混合的(GMM)高斯混合模型,那这么一个模型我们又应该怎么去处理它。当然有些时候我们是有一幅图像,将图像的前景背景分开,这样一个东西其实我们不知道样本的标记值是什么,也就是这个y值是不知道的,所以说它是一个标准的无监督学习,而且是K-Means的一个推广。

现在我们来看看它是怎么回事,首先我们吧记号先明确一下,这个样本它可能是由k个高斯分布混合得到的,然后每一个高斯分布被取到的概率分别是p_{i1},p_{i2},......p_{ik}然后共同组成了P_{I}这么一个向量。第i个高斯分布的均值我们记作u_{i},方差我们记作\sigma _i,我们刚才的那个例子里边才两个高斯分布,其实那里边就两个p_{i1}p_{i2},并且分别知道它们是0.6和0.4,在那个例子中u_i是一个数,方差是一个数,如果我们拿到一个数据均值可能不是一维的,它可能是两个数的时候,是一个二维的,那么它的方差是一个2乘2的正定的方阵。所以说我们得看样本如果是n维的,则均值是一个n维的向量,方差是一个n阶的正定方阵。

那么现在如果是给我们这样一系列样本,x1,x2,……,xn,再次强调一下我们没有说x1,x2一直到xn是几维,它可能是若干维度的。比如说我们不光拿到了身高数据还拿到了体重数据,用身高和体重去判断这个人是男性还是女性,再比如说加个腰围就变成了三维数据,我们就希望来估算P_{I},U,和\sigma。根据这样一个思路如果是采用极大似然估计来估算的话首先建立这样一个目标函数:

                                                           l_{\Pi ,\mu ,\sigma }(x)=\sum_{i=1}^{N}log\left ( \sum_{k=1}^{K}\Pi _kN(x_i|\mu _k,\sigma _k) \right )

但要注意一下哈,我们这里的\sigma变了一下,变成了方差\sigma了。我们知道N(x_i|\mu _k,\sigma _k)是某一个样本属于某一个高斯分布的概率密度。而我们知道每一个高斯分布本身是有一个概率的,比方说p_{ik}嘛,再把每一个的加起来不就是所有样本的高斯分布嘛,这个样本本身它的值是几,对吧。这样一个东西我们按道理把它从1到N乘起来就是我们的似然概率,那如果我们取对数就是对数似然,就看到了这样一个式子。如果我们按照我们刚才的那个做法,仍然是对这\Pi ,\mu ,\sigma分别求偏导的话,最后会发现0等于0。因为我们的参数太多了。因为我们没法直接去求了,就是没法直接去估计\mu ,\sigma了。怎么办呢?我们来想一件事情哈,就是我们在解决这个问题的时候我们分成两个步骤来做,分成哪两步来做呢?我们来看一下哈,我们先来想一件事,这是最直观的做法哈,就是我们先验性的给出一些东西,比如说u男它先验性的可以认为是1.80,\sigma男=10,u女=1.65,\sigma女=8,这些值不一定满足现在的样本比如x1到xn,但可以先验性的去猜一下,比如再猜pi男=pi女=0.5,也就是各自有一半。如果说我们猜到了这个值的时候,请问如果我们拿到了一个样本是1.88,那么我们怎么样来估计他属于男性的概率有多大呢。什么意思呢,就是如果这些参数都给我们了,我们想算一个事情,就是给定了一个xi=1.88,请问他的标记值等于男性的概率P(y_i=man|x_i=1.88)=?那怎么样来考察这个事情呢?那我们就分别把这1.88带进去嘛。首先就是一个是{1.80,10},一个是{1.65,8},pi1和pi2都是0.5,分别带入高斯函数求出函数值不就得到了概率了吗,假如说我们算出来分别是0.2和0.08。不要忘了这个事情哈,就是p的先验概率都是0.5,那这样一来不就是0.5*0.2/(0.5*0.2+0.5*0.8)我们不就把这个0.2做了一个归一化嘛,我们总能算出一个数来,假如算出来就是0.67,我们姑且把它记作\gamma好了,也就是1.88这个值属于男性的概率就是0.67,属于女性的概率就是0.33。我们通过猜可以算出这个值的。现在考虑这样一个东西哈,比如1.88属于男性和女性的概率分别是0.67和0.33,1.58属于男性和女性的概率分别是0.4和0.6,2.12属于男性和女性的概率分别是0.99和0.01……,1.70属于男性和女性的概率分别是0.5和0.5。我们来做一个非常数学化的一个东西,就是1.88,0.67,我们把它乘起来会得到一个数,1.88和0.33乘起来又可以得到一个东西,所有的这些数字都算出来,这些数字现在只把男性的那一部分拿出来,就是1.88这个人他可能有1.23是男性的部分,有0.65是女性的部分。我们就把男性的那部分拿出来哈,物理上每意义我们就从数学上来推导哈,我们不是做了这么一个事情嘛,这些样本就应该服从这个分布,那如此一来,就直接求这些数字的均值和伪方差就应该是\mu _1\sigma _1的估计。同理我们对\mu _2,\sigma _2,也就是女性的样本。那我们就发现我们对u_{1},\sigma_{1},u_{2},\sigma_{2}做了一次估计,估计是来自于样本的,而这些估计是来自于样本的而不是我们之前猜的,那我们拿到了这个数据之后怎么办呢?因为\mu _1可能就会变成了1.78,\sigma _1变成了9.8,\mu _2变成了1.62,\sigma _2变成了5.2,然后我们再用这个数字重新算一下1.88属于男性和女性的概率,然后又算得两个数字,再得到了\mu _1\sigma _1,我们不断地做这么一个迭代,最后总能得到u_{1},\sigma_{1},u_{2},\sigma_{2},直到它们不再发生什么变化为止也就是收敛了。但这是非常不严格的一个做法。我们先来看一下这么一个公式:

            

也就是说x_i这么一个样本已经有了,我就能算这么一个值,然后乘上它本身这么一个概率p_{ik},一共有若干个高斯分布嘛,这是某一个,它的先验概率,做一个归一化,求出的值就是第i个样本属于某一个组分它的这个概率,对吧,这个东西我们每一个样本都去求。然后呢我们要想算它的那个均值,x_i这么一个数乘以\gamma值,x_i是那个1.88,\gamma是那个0.67,它两乘起来就是就是那个男的嘛,把这些男性都加完除以男性的总的加和,得到\mu _k,用的就是极大似然估计,带进去就行了。那现在我们就来把事情做的正规一些,如果是正儿八经推导又该怎么做呢?

           

首先EM算法我们来去给出这么一个记号,这里有{x_1,x_2,......,x_m}这m个独立的样本,我们希望找出样本它服从的概率分布p(x,z),x是我们拿到的样本数据,z就是那个男性还是女性的标记,叫做隐变量,也就是我们看不到的那个变量。怎么做呢?我们试试哈,我们仍然使用极大似然估计这个手段,我们来看看这个东西本身:

                                                             l(\theta )=\sum_{i=1}^{m}logp(x,\theta )=\sum_{i=1}^{m}log\sum_zp(x,z,\theta )

这个x的概率分布是p(x)它应该有某一个参数\theta比如说GMM中这个\theta就是p_i,\mu ,\sigma,反正是一些未知的参数。对于这样一个目标函数,反正我们是需要估计\theta,而它可能还有z,非常不便于估计参数那该怎么办呢?我们来想一个办法比如说先固定一下这个z,求\theta,再固定\theta求z,不断地迭代做这个事情。

我们现在要做的事情就是找到蓝色的曲线使得在\theta_0这个地方相等,而其它地方是小于的。也就是说对r做这样一个估计就好了,因为f不仅有\theta还有z,不好估计所以扔掉它。我们来看看怎么样真正的来做的:

首先我们得到的对数似然其实是这么一个东西,然后这么一个东西我们把样本带进去因为我们现在这个x就是第i个样本嘛,然后zi呢就是xi所对应的那个隐变量,在刚才那个例子中指的就是男性还是女性,在鸢尾花的例子中指的就是第一个类别还是第三个类别或者别的,反正是个隐变量哈。我们现在再往下来看,我们现在假定说给定关于z的一个分布叫做Qi,Qi是关于z的某一个分布,既然如此对于p这样一个东西,先除上一个Q再乘上一个Q,我们现在再来做这样一个事情,就是说我们现在先不要管\sum符号,就是我们现在证明后面这一坨比这一坨一定是要大于等于的,每一项,不管i等于1这一项还是其他的,反正每一项加起来都比它大。然后我们看这一部分,这一部分在去做的时候怎么考虑呢?我们把这个东西看作是一个整体,就把它当作是某一个x好了:

然后这个东西是一个分布,然后对这么一个大X去求概率分布嘛。这么一个分布再去求X的加和那不就意味着这个\sum这么一个玩意儿不就相当于X对Q求期望EQ(X)嘛,然后这个东西求完再取一个对数而已嘛。

然后我们得到了这么一个东西其实表示的就是原始的这么一个函数是在上方,我们算这个框住的部分一定是在下方,也就是r(x)这么一个下界函数呀。

当我们得到它的时候我们其实希望做一点事儿,我们非常希望做的事其实就是能不能取得等号呢?如果这个地方能够取得等号也就希望我们固定z求\theta了。满足什么条件的z能够使得它们在\theta _0这一点处相等呢?因为原函数是一个严格凹的,因此割线一定在下方,要想相等,那么曲线近似为一个点不就相等了吗?也就意味着\frac{P(x,z,\theta )}{Q_{zi}}为一定值。也就是说P(x,z,\theta )和Q(zi)得成正比才行。也就是说:

                   

它是一个条件概率的话就可以取等号了。也就是固定了一个\theta先对z求一个估计。

     

通过求偏导最后得出结论:

                                    

这个xi就是1.88那个样本,w_{l}^{(i)}表示1.88这个样本属于哪一个组分的概率0.67,然后把它们加起来就是所谓的N男嘛。这不就是对男性的均值的估计。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值