摘要算法
EM算法主要分为两个步骤:E-step和M-step,主要应用在几率模型中。机器学习中,几率模型在进行参数估计时,咱们主要应用的是最大似然估计,因此在对EM算法进行讨论时,是离不开最大似然估计的。EM算法主要是用来解决那些样本中存在隐变量的状况。E-step固定模型参数经过数学模型求解隐变量,M-step根据E-step求得的隐变量在经过最大似然估计最大化似然函数从而求出模型的参数,这样相互的迭代,从而获得模型的局部最优解。EM算法主要应用在聚类算法中,由于通常状况下聚类问题都存在一个隐变量。机器学习
什么是隐变量ide
样本中存在隐变量即咱们在对数据进行采样中,能够认为隐变量是那些咱们不能经过数据采样所能肯定的属性。若是不存在隐变量,那对于一些聚类模型,咱们的参数求解就简单不少,好比k-means,k-means只是利用了EM算法的思想。咱们有一批数据,想利用k-means算法来进行聚类分析,对于k-means算法,咱们要肯定的是k和k个质心,假如咱们在对这批数据采样时已经知道他们分为4类,并且采样前就已经把数据给分好类了,已经知道了,还用聚类算法干吗,咱们这是暂时的假设用他来举例说明什么是隐变量,那么咱们在用k-means算法时就变得很简单了,直接求出这k个质心,而不用咱们所熟知的k-means算法的计算步骤。之因此咱们使用咱们所熟知的k-means算法的步骤,那是由于咱们不知道每一个样本应该归属于哪一个类以及他们存在多少个聚类中心比较合适。那么这个隐变量就是每个样本应该归属于哪一个类。在举一个例子,高斯混合模型,这个是典型用到了EM算法的思想,若是对这个模型不太清楚,能够网上查资料。一样,咱们也有这样一批数据,在采样中,咱们就已经知道k和每一个样本应该属于哪一个类,那么咱们所要作的工做就是把每一类数据拿出来,直接经过均值和方差就能够求出每个高斯函数的模型了,而不须要再进行EM算法经过最大似然估计来计算咱们的高斯混合模型参数了。而现实的应用中是咱们不知道这样的一批数据应该分为几个类以及每个样本应该属于哪个类,那么这就是隐变量。这样的问题和先有鸡仍是先有蛋的问题差很少,当咱们知道数学模型的参数后,咱们就知道了样本应该属于哪一个类,同时当咱们知道隐变量后,咱们也就知道样本属于哪一个类,从而获得数学模型的参数,可是不幸的是在开始的时候咱们只有样本,隐变量和模型参数都不知道。函数
凸函数和凹函数以及其性质学习
为何要讲这个,由于EM算法得以实施的基础就是函数的凹凸性以及凹凸函数的一些性质。因此这里仍是说一下吧。spa
在高等数学和数学分析(数学专业的书)对于凹凸函数的定义可能有些不同。这个没有关系只是叫法不一样,可是他们这些图形和图形的性质是同样的。blog
凸函数定义:函数的二阶导函数在必定的区间内大于等于零,性质以下数学
以下图:it
凹函数的定义:函数的二阶导函数在必定的区间内小于等于零,性质以下:io
以下图所示:
最大似然估计步骤
由于在几率模型中,进行参数估计通常都采用最大似然估计
一、肯定几率模型求出似然函数
二、对似然函数取log,把连乘变为求和
三、对变换后的似然函数求导,并另导数等于0,而后整理获得似然方程组
四、求解似然方程组,获得模型参数
EM算法
假设咱们有一批数据样本{x(1),…,x(n)},,样本容量为n,几率模型为p(x,z)来对咱们的数据进行拟合。根据几率模型的参数估计算法,咱们能够获得似然函数:
上式中(1)咱们是经过最大似然估计的步骤获取的,从(1)到(2)引入了样本属于某一个类的几率函数,从而对某一个样本求得该样本属于某个类的全几率公式,即引入了隐变量z。
当咱们采用传统的几率模型求解参数的方法即最大似然估计,对上述式子进行求导数,从而获得似然方程:
咱们会发现上述似然方程中存在对数,而且对数里面是个求和公式,这种求解是很可贵到参数的解析解的。遇到胡同了,咱们就要想一下拐一下弯,既然这个公式没法求解的难点在于对数里面有求和公式,那么咱们能不能采用什么办法把对数后面的求和号给拿到外面。再看看对数函数的性质是什么样子的?对数函数是一个凹函数那么他确定知足凹函数的基本性质:
把上式进行变换:
咱们的目标函数和凹函数的性质还差那么一点点的差距,那么咱们就认为对于每个实例i,用Qi表示对应于隐含变量即其属于哪一个类的几率分布,咱们这是对于一个样本而言的,那么样本有n个,就会存在n个这样的Qi的函数分布,必定要把这一点弄明白。这个Qi表示的样本i对应于k个类,其属于这k个类的几率分布。那么Qi应该知足的条件是:
那么咱们就能够把咱们的似然函数进行改写了:
这样一看就和咱们的凹函数性质一致了吧。因而咱们能够把上述函数经过凹函数的性质进行变换:
既然原函数没法获得最优解,咱们能够经过调整原函数的下界函数,对原函数的下界函数求最大值,从而使原函数逐步逼近最优解或者获得一个局部最优解。即咱们不停的求解上式中(4)的最大值,从而是咱们原函数逼近最优解。
看到这可能会有一个问题,经过最大似然估计获得的原似然方程没法获得解析解,为何变成(4)就能够获得了呢?咱们在已知隐变量的前提下对模型参数进行求偏导获得的似然方程中,发现log已经不复存,已经变成了咱们熟悉的线性方程组或者非线性方程组(这个跟数学模型有关),通常状况下这个就能够利用线性代数的理论进行求解了啊。
所以EM算法的基本思想就是经过引入隐变量,先获得样本属于某一个类的几率,而后再使用最大似然估计最大化似然函数来求解参数,获得参数之后,数学模型就已经肯定,那么我就能够获得样本属于哪一个类了,从而获得隐变量的值,所以就用迭代的进行求解最终获得问题的解。当咱们引入隐变量后,整个似然函数就会存在两类参数类型:隐变量和数学模型的参数。那么EM算法采用的步骤以下:
E-step: 经过固定数学模型的参数,利用现有样本对隐变量进行参数估计,即求出隐变量的指望也就是咱们指望样本属于哪个类
M-step: 经过E-step求得的隐变量,对数学模型参数求导,最大化似然函数。
隐变量的求解
对于EM算法,咱们是不断的逼近最优值,那么E-step计算的是什么呢?由于在凹函数的性质中上述不等式取等号的前提条件是xi为常数
则:
对上式进行求和:
经过上述两个式子咱们进行变换获得:
在上式中从(1)到(2)为何会是这样,咱们按照举个例子,用二元一次函数的积分问题来看待这个问题的推导,由于积分的实质也是一种求和对函数下部的面积进行无线的拆分而后再求和。以下式的二元函数:
而后咱们对上面的二元一次函数对y进行求积分:
从而消除了变量y,一样的道理,从(1)到(2)的过程当中,咱们分母对样本i的全部的可能隐变量取值求和,从而把隐变量z给消除,从而获得公式(2)从(2)到(3)是经过条件几率的公式获得的。所以咱们能够发现隐变量其实就是在固定数学模型参数和已知数据样本的状况下的后验几率。
以上只是理论部分,下面咱们简单说一下EM算法的实际应用。
在实际应用中咱们不会按照上面公式来推导咱们的算法。咱们只知道两个点就能够了:隐变量的求解和已知隐变量的前提下最大化似然函数从而来求解数学模型的参数。
隐变量的求解:咱们已经知道其是样本和数学模型参数的后验几率,那么我就能够根据实际的状况来推导计算这个后验几率从而获得咱们的隐变量和参数的关系表达式从而用于迭代求解即为E-step
最大化似然函数:这个是咱们最大似然估计算法的步骤了即M-step。
---能力有限,存在不对的地方,望请指教。