混合高斯模型算法(转)

下面介绍一下几种典型的机器算法

首先第一种是高斯混合模型算法:

高斯模型有单高斯模型(SGM)和混合高斯模型(GMM)两种。

(1)单高斯模型:

为简单起见,阈值t的选取一般靠经验值来设定。通常意义下,我们一般取t=0.7-0.75之间。

二维情况如下所示:

(2)混合高斯模型:

对于(b)图所示的情况,很明显,单高斯模型是无法解决的。为了解决这个问题,人们提出了高斯混合模型(GMM),顾名思义,就是数据可以看作是从数个高 斯分布中生成出来的。虽然我们可以用不同的分布来随意地构造 XX Mixture Model ,但是 GMM是 最为流行。另外,Mixture Model 本身其实也是可以变得任意复杂的,通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布。

每个 GMM 由 K 个 Gaussian 分布组成,每个 Gaussian 称为一个“Component”,这些 Component 线性加成在一起就组成了 GMM 的概率密度函数:

                (1)

其中,πk表示选中这个component部分的概率,我们也称其为加权系数。

根据上面的式子,如果我们要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:

(1)首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数 πk,选中了 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为了已知的问题。假设现在有 N 个数据点,我们认为这些数据点由某个GMM模型产生,现在我们要需要确定 πk,μk,σk 这些参数。很自然的,我们想到利用最大似然估计来确定这些参数,GMM的似然函数如下:

        (2)

在最大似然估计里面,由于我们的目的是把乘积的形式分解为求和的形式,即在等式的左右两边加上一个log函数,但是由上文博客里的(2)式可以看出,转化为log后,还有log(a+b)的形式,因此,要进一步求解。

我们采用EM算法,分布迭代求解最大值:

EM算法的步骤这里不作详细的介绍,可以参见博客:

http://blog.pluskid.org/?p=39

贴出代码:

  1 function varargout = gmm(X, K_or_centroids)  2 % ============================================================  3 % Expectation-Maximization iteration implementation of  4 % Gaussian Mixture Model.  5 %  6 % PX = GMM(X, K_OR_CENTROIDS)  7 % [PX MODEL] = GMM(X, K_OR_CENTROIDS)  8 %  9 %  - X: N-by-D data matrix. 10 %  - K_OR_CENTROIDS: either K indicating the number of 11 %       components or a K-by-D matrix indicating the 12 %       choosing of the initial K centroids. 13 % 14 %  - PX: N-by-K matrix indicating the probability of each 15 %       component generating each point. 16 %  - MODEL: a structure containing the parameters for a GMM: 17 %       MODEL.Miu: a K-by-D matrix. 18 %       MODEL.Sigma: a D-by-D-by-K matrix. 19 %       MODEL.Pi: a 1-by-K vector. 20 % ============================================================ 21   22     threshold = 1e-15; 23     [N, D] = size(X); 24   25     if isscalar(K_or_centroids) 26         K = K_or_centroids; 27         % randomly pick centroids 28         rndp = randperm(N); 29         centroids = X(rndp(1:K), :); 30     else 31         K = size(K_or_centroids, 1); 32         centroids = K_or_centroids; 33     end 34   35     % initial values 36     [pMiu pPi pSigma] = init_params(); 37   38     Lprev = -inf; 39     while true 40         Px = calc_prob(); 41   42         % new value for pGamma 43         pGamma = Px .* repmat(pPi, N, 1); 44         pGamma = pGamma ./ repmat(sum(pGamma, 2), 1, K); 45   46         % new value for parameters of each Component 47         Nk = sum(pGamma, 1); 48         pMiu = diag(1./Nk) * pGamma‘ * X; 49         pPi = Nk/N; 50         for kk = 1:K 51             Xshift = X-repmat(pMiu(kk, :), N, 1); 52             pSigma(:, :, kk) = (Xshift‘ * ... 53                 (diag(pGamma(:, kk)) * Xshift)) / Nk(kk); 54         end 55   56         % check for convergence 57         L = sum(log(Px*pPi‘)); 58         if L-Lprev < threshold 59             break; 60         end 61         Lprev = L; 62     end 63   64     if nargout == 1 65         varargout = {Px}; 66     else 67         model = []; 68         model.Miu = pMiu; 69         model.Sigma = pSigma; 70         model.Pi = pPi; 71         varargout = {Px, model}; 72     end 73   74     function [pMiu pPi pSigma] = init_params() 75         pMiu = centroids; 76         pPi = zeros(1, K); 77         pSigma = zeros(D, D, K); 78   79         % hard assign x to each centroids 80         distmat = repmat(sum(X.*X, 2), 1, K) + ... 81             repmat(sum(pMiu.*pMiu, 2)‘, N, 1) - ... 82             2*X*pMiu‘; 83         [dummy labels] = min(distmat, [], 2); 84   85         for k=1:K 86             Xk = X(labels == k, :); 87             pPi(k) = size(Xk, 1)/N; 88             pSigma(:, :, k) = cov(Xk); 89         end 90     end 91   92     function Px = calc_prob() 93         Px = zeros(N, K); 94         for k = 1:K 95             Xshift = X-repmat(pMiu(k, :), N, 1); 96             inv_pSigma = inv(pSigma(:, :, k)); 97             tmp = sum((Xshift*inv_pSigma) .* Xshift, 2); 98             coef = (2*pi)^(-D/2) * sqrt(det(inv_pSigma)); 99             Px(:, k) = coef * exp(-0.5*tmp);100         end101     end102 end

函数返回的 Px 是一个  的矩阵,对于每一个  ,我们只要取该矩阵第  行中最大的那个概率值所对应的那个 Component 为  所属的 cluster 就可以实现一个完整的聚类方法了。

转载于:http://www.cnblogs.com/CBDoctor/archive/2011/11/06/2236286.html

时间: 2024-11-10 00:38:39

混合高斯模型算法(转)的相关文章

混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 主要内容: 1. 概率论预备知识 2. 单高斯模型 3. 混合高斯模型 4. EM算法 5. K-means聚类算法 一.概率论预备知识 1. 数学期望/均值.方差/标准差 设离散型随机变量X的分布律为 则称为X的数学期望或均值 设连续型随机变量X的概率密度函数(pdf)为 则其数学期望定义为: 随机变量X的方差: 随机变量X的标准差: 2. 正态分布.协方差 正态分布: 概率密度函数: 设(X,Y)为二维随机变量,若存在,则

EM算法与混合高斯模型

很早就想看看EM算法,这个算法在HMM(隐马尔科夫模型)得到很好的应用.这个算法公式太多就手写了这部分主体部分. 好的参考博客:最大似然估计到EM,讲了具体例子通熟易懂. JerryLead博客很不错 混合高斯模型算法

【转载】混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示.与k-means的硬指定不同,我们首先认为是满足一定的概率分布的,这里我们认为满足多项式分布,,其中,有k个值{1,…,k}可以选取.而且我们认为在给定后,满足多值高斯分布,即.由此可以得到联合分布. 整个模型简单描述为对于每个

机器学习3_EM算法与混合高斯模型

①EM算法: http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html 李航 <统计学习方法>9.1节 ②混合高斯模型(GMM): http://blog.pluskid.org/?p=39  (前面片段+后面matlab代码+conv的解释) http://blog.pluskid.org/?p=81  (GMM模型精解:可用EM算法进行优化的证明) 李航 <统计学习方法>9.1节 原文地址:https://

斯坦福ML公开课笔记13A——混合高斯模型、混合贝叶斯模型

本文对应公开课的第13个视频,这个视频仍然和EM算法非常相关,第12个视频讲解了EM算法的基础,本视频则是在讲EM算法的应用.本视频的主要内容包括混合高斯模型(Mixture of Gaussian, MoG)的EM推导.混合贝叶斯模型(Mixture of Naive Bayes,MoNB)的EM推导.因子分析模型(Factor Analysis Model)及其EM求解.由于本章内容较多,故而分为AB两篇,本篇介绍至混合模型的问题. 很久没有写这个系列的笔记了,各种事情加各种懒导致的.虽然慢

混合高斯模型聚类

混合高斯模型简介 混合高斯模型基于多变量正态分布.类gmdistribution通过使用EM算法来拟合数据,它基于各观测量计算各成分密度的后验概率. 高斯混合模型常用于聚类,通过选择成分最大化后验概率来完成聚类.与k-means聚类相似,高斯混合模型也使用迭代算法计算,最终收敛到局部最优.高斯混合模型在各类尺寸不同.聚类间有相关关系的的时候可能比k-means聚类更合适.使用高斯混合模型的聚类属于软聚类方法(一个观测量按概率属于各个类,而不是完全属于某个类),各点的后验概率提示了各数据点属于各个

混合高斯模型(Mixtures of Gaussians)

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示.与k-means的硬指定不同,我们首先认为是满足一定的概率分布的,这里我们认为满足多项式分布,,其中,有k个值{1,…,k}可以选取.而且我们认为在给定后,满足多值高斯

聚类——混合高斯模型 Gaussian Mixture Model

转自: http://blog.csdn.net/jwh_bupt/article/details/7663885聚类系列: 聚类(序)----监督学习与无监督学习 聚类(1)----混合高斯模型 Gaussian Mixture Model 聚类(2)----层次聚类 Hierarchical Clustering 聚类(3)----谱聚类 Spectral Clustering -------------------------------- 聚类的方法有很多种,k-means要数最简单的一

混合高斯模型

高斯分布有很多优点并且普遍存在,但是,它是单峰函数,所以对于复杂的分布表达能力比较差,我们可以用多个高斯分布的线性组合来逼近这些复杂的分布.高斯混合概率分布可以写成高斯分布的线性叠加的形式,如下所示: 写的不错:混合高斯模型