1 / 11
文档名称:

高斯混合模型算法.doc

格式:doc   大小:254KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

高斯混合模型算法.doc

上传人:yzhfg888 2019/8/31 文件大小:254 KB

下载得到文件列表

高斯混合模型算法.doc

相关文档

文档介绍

文档介绍:高斯混合模型算法下面介绍一下几种典型的机器算法首先第一种是高斯混合模型算法:高斯模型有单高斯模型(SGM)和混合高斯模型(GMM)两种。(1)单高斯模型:为简单起见,阈值t的选取一般靠经验值来设定。通常意义下,我们一般取t=-。二维情况如下所示:(2)混合高斯模型:对于(b)图所示的情况,很明显,单高斯模型是无法解决的。为了解决这个问题,人们提出了高斯混合模型(GMM),顾名思义,就是数据可以看作是从数个高斯分布中生成出来的。虽然我们可以用不同的分布来随意地构造XXMixtureModel,但是GMM是最为流行。另外,MixtureModel本身其实也是可以变得任意复杂的,通过增加Model的个数,我们可以任意地逼近任何连续的概率密分布。每个GMM由K个Gaussian分布组成,ponent”,ponent线性加成在一起就组成了GMM的概率密度函数:(1)其中,ponent部分的概率,我们也称其为加权系数。根据上面的式子,如果我们要从GMM的分布中随机地取一个点的话,实际上可以分为两步:(1)ponent之中选一个,ponent被选中的概率实际上就是它的系数πk,ponent之后,ponent的分布中选取一个点就可以了──这里已经回到了普通的Gaussian分布,转化为了已知的问题。假设现在有N个数据点,我们认为这些数据点由某个GMM模型产生,现在我们要需要确定πk,μk,σk这些参数。很自然的,我们想到利用最大似然估计来确定这些参数,GMM的似然函数如下:(2)在最大似然估计里面,由于我们的目的是把乘积的形式分解为求和的形式,即在等式的左右两边加上一个log函数,但是由上文博客里的(2)式可以看出,转化为log后,还有log(a+b)的形式,因此,要进一步求解。我们采用EM算法,分布迭代求解最大值:EM算法的步骤这里不作详细的介绍,可以参见博客:http://blog./?p=39贴出代码:1functionvarargout=gmm(X,K_or_centroids)2%============================================================3%Expectation-Maximizationiterationimplementationof4%%6%PX=GMM(X,K_OR_CENTROIDS)7%[PXMODEL]=GMM(X,K_OR_CENTROIDS)8%9%-X:N-by-%-K_OR_CENTROIDS:ponentsoraK-by-Dmatrixindicatingthe12%%14%-PX:N-by-%-MODEL:astructurecontainingtheparametersforaGMM:17%:aK-by-%:aD-by-D-by-%:a1-by-%============================================================2122threshold=1e-15;23[N,D]=size(X);2425ifisscalar(K_or_centroids)26K=K_or_centroids;27%randomlypickcentroids28rndp=randperm(N);29centroids=X(rndp(1:K),:);30else31K=size(K_or_centroids,1);32centroids=K_or_centroids;33end3435%initialvalues36[pMiupPipSigma]=init_params();3738Lprev=-inf;39whiletrue40Px=calc_prob();4142%newvalueforpGamma43pGamma=Px.*repmat(pPi,N,1);44pGamma=pGamma./repmat(sum(pGamma,2),1,K);4546%ponent47Nk=sum(pGamma,1);48pMiu=diag(1./Nk)*pGamma'*X;49pPi=Nk/N;50forkk=1:K51Xshift=X-repmat(pMiu(kk,:),N,1);52pSigma(:,:,kk)=(Xshift'*...53(diag(pGamma(:,kk))*Xshift))/Nk(kk);5