EM算法简介.ppt
- 格式:ppt
- 大小:596.51 KB
- 文档页数:30
最大期望算法(Expectation-Maximization algorithm, EM),或Dempster-Laird-Rubin算法,是一类通过迭代进行极大似然估计(Maximum Likelihood Estimation, MLE)的优化算法,通常作为牛顿迭代法(Newton-Raphson method)的替代用于对包含隐变量(latent variable)或缺失数据(incomplete-data)的概率模型进行参数估计。
EM算法的标准计算框架由E步(Expectation-step)和M步(Maximization step)交替组成,算法的收敛性可以确保迭代至少逼近局部极大值。
EM算法是MM算法(Minorize-Maximization algorithm)的特例之一,有多个改进版本,包括使用了贝叶斯推断的EM算法、EM梯度算法、广义EM算法等。
由于迭代规则容易实现并可以灵活考虑隐变量,EM算法被广泛应用于处理数据的缺测值,以及很多机器学习(machine learning)算法,包括高斯混合模型(Gaussian Mixture Model, GMM)和隐马尔可夫模型(Hidden Markov Model, HMM)的参数估计。
EM算法是一种迭代优化策略,由于它的计算方法中每一次迭代都分两步,其中一个为期望步(E步),另一个为极大步(M步),所以算法被称为EM算法(Expectation-Maximization Algorithm)。
EM算法受到缺失思想影响,最初是为了解决数据缺失情况下的参数估计问题,其算法基础和收敛有效性等问题在Dempster、Laird和Rubin三人于1977年所做的文章《Maximum likelihood from incomplete data via the EM algorithm》中给出了详细的阐述。
其基本思想是:首先根据己经给出的观测数据,估计出模型参数的值;然后再依据上一步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前己经观测到的数据重新再对参数值进行估计,然后反复迭代,直至最后收敛,迭代结束。
EM算法EM算法--应用到三个模型:高斯混合模型,混合朴素贝叶斯模型,因子分析模型判别模型求的是条件概率p(y|x),生成模型求的是联合概率p(x,y).即= p(x|y) ? p(y)常见的判别模型有线性回归、对数回归、线性判别分析、支持向量机、boosting、条件随机场、神经网络等。
常见的生产模型有隐马尔科夫模型、朴素贝叶斯模型、高斯混合模型、LDA、RestrictedBoltzmann Machine等。
所以这里说的高斯混合模型,朴素贝叶斯模型都是求p(x,y)联合概率的。
(下面推导会见原因)套路小结:凡是生产模型,目的都是求出联合概率表达式,然后对联合概率表达式里的各个参数再进行估计,求出其表达式。
下面的EM算法,GMM 等三个模型都是做这同一件事:设法求出联合概率,然后对出现的参数进行估计。
一、EM算法:作用是进行参数估计。
应用:(因为是无监督,所以一般应用在聚类上,也用在HMM 参数估计上)所以凡是有EM算法的,一定是无监督学习.因为EM是对参数聚集给定训练样本是高斯混合模型,混合朴素贝叶斯模型,因子分析模型"> 样例独立,我们想要知道每个样例隐含的类别z,使是p(x,z)最大,(即如果将样本x(i)看作观察值,潜在类别z看作是隐藏变量,则x可能是类别z,那么聚类问题也就是参数估计问题,)故p(x,z)最大似然估计是:高斯混合模型,混合朴素贝叶斯模型,因子分析模型">所以可见用到EM算法的模型(高斯混合模型,朴素贝叶斯模型)都是求p(x,y)联合概率,为生成模型。
对上面公式,直接求θ一般比较困难,因为有隐藏变量z存在,但是一般确定了z后,求解就容易了。
EM是一种解决存在隐含变量优化问题的有效方法。
竟然不能直接最大化?(θ),我们可建立?的下界(E步),再优化下界(M步),见下图第三步,取的就是下界高斯混合模型,混合朴素贝叶斯模型,因子分析模型" action-data="http%3A%2F%%2Fbl og%2F515474%2F201305%2F19180744-0ed136937810 4b548dbee01337f6ba69.jpg" action-type="show-slide"> (总式)解释上式:对于每一个样例i,让Qi表示该样例隐含变量z的某种分布,Qi满足的条件是(如果z 是连续性的,那么Qi是概率密度函数(因子分析模型就是如此),需要将求和符号换成积分符号即:高斯混合模型,混合朴素贝叶斯模型,因子分析模型">因子分析模型是如此,这个会用在EM算法的M步求。
EM算法(坐标上升算法)⼗⼤算法之⼀:EM算法。
能评得上⼗⼤之⼀,让⼈听起来觉得挺NB的。
什么是NB啊,我们⼀般说某个⼈很NB,是因为他能解决⼀些别⼈解决不了的问题。
神为什么是神,因为神能做很多⼈做不了的事。
那么EM算法能解决什么问题呢?或者说EM算法是因为什么⽽来到这个世界上,还吸引了那么多世⼈的⽬光。
我希望⾃⼰能通俗地把它理解或者说明⽩,但是,EM这个问题感觉真的不太好⽤通俗的语⾔去说明⽩,因为它很简单,⼜很复杂。
简单在于它的思想,简单在于其仅包含了两个步骤就能完成强⼤的功能,复杂在于它的数学推理涉及到⽐较繁杂的概率公式等。
如果只讲简单的,就丢失了EM算法的精髓,如果只讲数学推理,⼜过于枯燥和⽣涩,但另⼀⽅⾯,想把两者结合起来也不是件容易的事。
所以,我也没法期待我能把它讲得怎样。
希望各位不吝指导。
⼀、最⼤似然扯了太多,得⼊正题了。
假设我们遇到的是下⾯这样的问题:假设我们需要调查我们学校的男⽣和⼥⽣的⾝⾼分布。
你怎么做啊?你说那么多⼈不可能⼀个⼀个去问吧,肯定是抽样了。
假设你在校园⾥随便地活捉了100个男⽣和100个⼥⽣。
他们共200个⼈(也就是200个⾝⾼的样本数据,为了⽅便表⽰,下⾯,我说“⼈”的意思就是对应的⾝⾼)都在教室⾥⾯了。
那下⼀步怎么办啊?你开始喊:“男的左边,⼥的右边,其他的站中间!”。
然后你就先统计抽样得到的100个男⽣的⾝⾼。
假设他们的⾝⾼是服从⾼斯分布的。
但是这个分布的均值u和⽅差∂2我们不知道,这两个参数就是我们要估计的。
记作θ= [u, ∂]T。
⽤数学的语⾔来说就是:在学校那么多男⽣(⾝⾼)中,我们独⽴地按照概率密度p(x|θ)抽取100了个(⾝⾼),组成样本集X,我们想通过样本集X来估计出未知参数θ。
这⾥概率密度p(x|θ)我们知道了是⾼斯分布N(u,∂)的形式,其中的未知参数是θ=[u, ∂]T。
抽到的样本集是X={x1,x2,…,x N},其中x i表⽰抽到的第i个⼈的⾝⾼,这⾥N就是100,表⽰抽到的样本个数。
em算法原理EM算法(Expectation-Maximization Algorithm)是一种常用的统计学习方法,用于求解含有隐变量的概率模型中的参数估计问题。
EM算法的基本思想是通过迭代的方式寻找概率模型的最大似然解。
在实际应用中,有时候概率模型中的一些变量是无法直接观测到的,这些变量称为隐变量。
如何利用观测变量来估计隐变量和模型参数就是EM算法所要解决的问题。
假设我们有一个包含观测变量X和隐变量Z的概率模型,其中X表示观测数据,Z表示对应的隐变量。
我们的目标是通过已知的观测数据X来估计模型的参数θ。
由于无法直接观测到隐变量Z,所以不能直接用最大似然估计的方法来估计参数θ。
EM算法的基本思想是通过引入一个辅助函数Q函数来进行估计。
具体地,EM算法将参数估计问题分为两步进行迭代。
首先,E步(Expectation):在E步,根据当前的参数估计值θ(t)计算Q函数的期望值。
这里的Q函数是关于隐变量Z和模型参数θ的函数。
在计算Q函数的期望值时,需要使用当前的参数估计值θ(t)来代替真实的参数θ。
通过计算Q函数的期望值,可以得到对应的隐变量的概率分布。
然后,M步(Maximization):在M步,根据E步得到的隐变量的概率分布,计算使得Q函数取得最大值时的模型参数估计值θ(t+1)。
这一步相当于求解一个参数最优化问题,可以使用极大似然估计或其他优化方法来进行求解。
通过不断地迭代E步和M步,直到收敛,就可以得到概率模型的最大似然解,即参数的估计值。
EM算法的优点在于可以处理含有隐变量的复杂概率模型,且收敛到全局最优解的可能性较大。
然而,EM算法也存在一些问题,比如可能陷入局部最优解,对初始值敏感等。
总之,EM算法是一种迭代求解含有隐变量的概率模型参数估计问题的方法,通过迭代的方式不断提高参数估计值的精度,从而得到对应的模型参数的估计值。
EM算法实验报告一、算法简单介绍EM 算法是Dempster,Laind,Rubin于1977年提出的求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行MLE估计,是一种非常简单实用的学习算法。
这种方法可以广泛地应用于处理缺损数据、截尾数据以及带有噪声等所谓的不完全数据,可以具体来说,我们可以利用EM算法来填充样本中的缺失数据、发现隐藏变量的值、估计HMM中的参数、估计有限混合分布中的参数以及可以进行无监督聚类等等。
本文主要是着重介绍EM算法在混合密度分布中的应用,如何利用EM算法解决混合密度中参数的估计。
二、算法涉及的理论我们假设X是观测的数据,并且是由某些高斯分布所生成的,X是包含的信息不完整(不清楚每个数据属于哪个高斯分布)。
,此时,我们用k维二元随机变量Z(隐藏变量)来表示每一个高斯分布,将Z引入后,最终得到:,,然而Z的后验概率满足(利用条件概率计算):但是,Z nk为隐藏变量,实际问题中我们是不知道的,所以就用Z nk的期望值去估计它(利用全概率计算)。
然而我们最终是计算max:最后,我们可以得到(利用最大似然估计可以计算):三、算法的具体描述3.1 参数初始化对需要估计的参数进行初始赋值,包括均值、方差、混合系数以及。
3.2 E-Step计算利用上面公式计算后验概率,即期望。
3.3 M-step计算重新估计参数,包括均值、方差、混合系数并且估计此参数下的期望值。
3.4 收敛性判断将新的与旧的值进行比较,并与设置的阈值进行对比,判断迭代是否结束,若不符合条件,则返回到3.2,重新进行下面步骤,直到最后收敛才结四、算法的流程图五、实验结果a_best=0.8022 0.1978 mu_best=2.71483.93074.9882 3.0102cov_best=(:,:,1) =5.4082 -0.0693-0.0693 0.2184(:,:,2) =0.0858 -0.0177-0.0177 0.0769f=-1.6323数据X的分布每次迭代期望值-50510利用EM估计的参量值与真实值比较(红色:真实值青绿色:估计值)六、参考文献1.M. Jordan. Pattern Recognition And Machine Learning2.Xiao Han. EM Algorithm七、附录close all;clear;clc;% 参考书籍Pattern.Recognition.and.Machine.Learning.pdf% % lwm@% 2009/10/15%%M=2; % number of GaussianN=200; % total number of data samplesth=0.000001; % convergent thresholdK=2; % demention of output signal% 待生成数据的参数a_real =[4/5;1/5];mu_real=[3 4;5 3];cov_real(:,:,1)=[5 0;0 0.2];cov_real(:,:,2)=[0.1 0;0 0.1];% generate the datax=[ mvnrnd( mu_real(:,1) , cov_real(:,:,1) , round(N*a_real(1)) )' , mvnrnd(mu_real(:,2),cov_real(:,:,2),N-round(N*a_real(1)))'];% for i=1:round(N*a_real(1))% while (~((x(1,i)>0)&&(x(2,i)>0)&&(x(1,i)<10)&&(x(2,i)<10)))% x(:,i)=mvnrnd(mu_real(:,1),cov_real(:,:,1),1)';% end% end%% for i=round(N*a_real(1))+1:N% while (~((x(1,i)>0)&&(x(2,i)>0)&&(x(1,i)<10)&&(x(2,i)<10)))% x(:,i)=mvnrnd(mu_real(:,1),cov_real(:,:,1),1)';% end% endfigure(1),plot(x(1,:),x(2,:),'.')%这里生成的数据全部符合标准%% %%%%%%%%%%%%%%%% 参数初始化a=[1/3,2/3];mu=[1 2;2 1];%均值初始化完毕cov(:,:,1)=[1 0;0 1];cov(:,:,2)=[1 0;0 1];%协方差初始化%% EM Algorothm% loopcount=0;figure(2),hold onwhile 1a_old = a;mu_old = mu;cov_old= cov;rznk_p=zeros(M,N);for cm=1:Mmu_cm=mu(:,cm);cov_cm=cov(:,:,cm);for cn=1:Np_cm=exp(-0.5*(x(:,cn)-mu_cm)'/cov_cm*(x(:,cn)-mu_cm));rznk_p(cm,cn)=p_cm;endrznk_p(cm,:)=rznk_p(cm,:)/sqrt(det(cov_cm));endrznk_p=rznk_p*(2*pi)^(-K/2);%E step%开始求rznkrznk=zeros(M,N);%r(Zpikn=zeros(1,M);%r(Zpikn_sum=0;for cn=1:Nfor cm=1:Mpikn(1,cm)=a(cm)*rznk_p(cm,cn);% pikn_sum=pikn_sum+pikn(1,cm);endfor cm=1:Mrznk(cm,cn)=pikn(1,cm)/sum(pikn);endend%求rank结束% M stepnk=zeros(1,M);for cm=1:Mfor cn=1:Nnk(1,cm)=nk(1,cm)+rznk(cm,cn);endenda=nk/N;rznk_sum_mu=zeros(M,1);% 求均值MUfor cm=1:Mrznk_sum_mu=0;%开始的时候就是错在这里,这里要置零。