混合高斯模型聚类

混合高斯模型简介

混合高斯模型基于多变量正态分布。类gmdistribution通过使用EM算法来拟合数据,它基于各观测量计算各成分密度的后验概率。

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

高斯混合聚类

高斯混合分布可以用来做数据聚类。

1. 为了展示高斯混合聚类的过程,先利用mvnrnd函数产生一些二变量高斯分布仿真数据:

mu1 = [1 2];

sigma1 = [3 .2; .2 2];

mu2 = [-1 -2];

sigma2 = [2 0; 0 1];

X = [mvnrnd(mu1,sigma1,200);mvnrnd(mu2,sigma2,100)];

scatter(X(:,1),X(:,2),10,‘ko‘)

2. 然后拟合两成分高斯混合分布。这里,准确的成分数是已知的,而在处理实际数据时就需要通过测试、比较多个成分的拟合结果来决定这一数量。

options = statset(‘Display‘,‘final‘);

gm = gmdistribution.fit(X,2,‘Options‘,options);

结果为

49 iterations, log-likelihood = -1207.91

3. 绘制估计的两成分混合分布的概率密度等高线如下。可以看到,两变量正态成分是相互重叠的,但是它们的峰值不同,这表明数据有理由分成两个聚类:

hold on

ezcontour(@(x,y)pdf(gm,[x y]),[-8 6],[-8 6]);

hold off

4. 使用cluster函数将拟合的混合分布数据分离成两类:

idx = cluster(gm,X);

cluster1 = (idx == 1);

cluster2 = (idx == 2);

scatter(X(cluster1,1),X(cluster1,2),10,‘r+‘);

hold on

scatter(X(cluster2,1),X(cluster2,2),10,‘bo‘);

hold off

legend(‘Cluster 1‘,‘Cluster 2‘,‘Location‘,‘NW‘)

每个聚类与混合分布中的一个成分有关。cluster基于估计的后验概率对各点做分类,属于哪个类的后验概率大则属于哪个类。posterior函数可以返回这个后验概率值。

例如,绘制各点属于第一成分的后验概率如下

P = posterior(gm,X);

scatter(X(cluster1,1),X(cluster1,2),10,P(cluster1,1),‘+‘)

hold on

scatter(X(cluster2,1),X(cluster2,2),10,P(cluster2,1),‘o‘)

hold off

legend(‘Cluster 1‘,‘Cluster 2‘,‘Location‘,‘NW‘)

clrmap = jet(80); colormap(clrmap(9:72,:))

ylabel(colorbar,‘Component 1 Posterior Probability‘)

使用高斯混合分布做软聚类

另一种分类的方法是使用前面计算的后验概率做软聚类。各点可以被赋予属于各类的一个得分,这个得分就是简单的后验概率,描述了各点与各聚类原型的相似程度。这样,各点可以按在聚类中的得分排序:

[~,order] = sort(P(:,1));

plot(1:size(X,1),P(order,1),‘r-‘,1:size(X,1),P(order,2),‘b-‘);

legend({‘Cluster 1 Score‘ ‘Cluster 2 Score‘},‘location‘,‘NW‘);

ylabel(‘Cluster Membership Score‘);

xlabel(‘Point Ranking‘);

尽管在数据散点图中很难看出分类的好坏,但得分图可以更明显的看出拟合的分布很好地完成了数据聚类,在得分0.5附近的点很少,即大多数点都易于分开。

使用高斯混合分布的软聚类与模糊k-means聚类方法相似,后者也是赋予各点相对各类的一个得分,但它进一步假设各聚类形状上近似球形,尺寸大小上也近似相等。这相当于所有成分协方差矩阵相同的高斯混合分布。而gmdistribution函数允许你设定各成分不同的协方差,默认情况下是为每个成分估计一个分离的无约束的协方差矩阵;而如果设定估计一个公共的对角协方差矩阵,则就与k-means相近了:

gm2 = gmdistribution.fit(X,2,‘CovType‘,‘Diagonal‘,...

‘SharedCov‘,true);

上面对于协方差的选项与模糊k-means聚类相似,但更灵活,允许不同的变量有不等的方差。

计算软聚类的得分可以不用先算硬聚类,可以直接使用posterior或cluster函数直接计算,如下

P2 = posterior(gm2,X); % equivalently [idx,P2] = cluster(gm2,X)

[~,order] = sort(P2(:,1));

plot(1:size(X,1),P2(order,1),‘r-‘,1:size(X,1),P2(order,2),‘b-‘);

legend({‘Cluster 1 Score‘ ‘Cluster 2 Score‘},‘location‘,‘NW‘);

ylabel(‘Cluster Membership Score‘);

xlabel(‘Point Ranking‘);

对新来点的聚类

前面的例子中,混合分布的数据拟合与数据聚类是分开的,两步中使用了相同的数据。当然你也可以在cluster函数做聚类时使用新的数据点,实现新来点在原数据聚类中的分类。

1. 给定数据集X,首先拟合高斯混合分布,前面的代码已经实现

gm

gm =

Gaussian mixture distribution with 2 components in 2 dimensions

Component 1:

Mixing proportion: 0.312592

Mean:    -0.9082   -2.1109

Component 2:

Mixing proportion: 0.687408

Mean:     0.9532    1.8940

2. 然后可以对新数据集中的点分类到对X的聚类中

Y = [mvnrnd(mu1,sigma1,50);mvnrnd(mu2,sigma2,25)];

idx = cluster(gm,Y);

cluster1 = (idx == 1);

cluster2 = (idx == 2);

scatter(Y(cluster1,1),Y(cluster1,2),10,‘r+‘);

hold on

scatter(Y(cluster2,1),Y(cluster2,2),10,‘bo‘);

hold off

legend(‘Class 1‘,‘Class 2‘,‘Location‘,‘NW‘)

与前面的例子一样,各点的后验概率被作为得分,而不是直接做硬聚类。

完成聚类的新数据集Y应该来自与X相同的种群,即来自X的混合分布中,因为在估计Y的后验概率时使用了基于X拟合的混合高斯分布的联合概率。

时间: 2024-11-05 12:31:41

混合高斯模型聚类的相关文章

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

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

混合高斯模型(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)为二维随机变量,若存在,则

混合高斯模型算法(转)

下面介绍一下几种典型的机器算法 首先第一种是高斯混合模型算法: 高斯模型有单高斯模型(SGM)和混合高斯模型(GMM)两种. (1)单高斯模型: 为简单起见,阈值t的选取一般靠经验值来设定.通常意义下,我们一般取t=0.7-0.75之间. 二维情况如下所示: (2)混合高斯模型: 对于(b)图所示的情况,很明显,单高斯模型是无法解决的.为了解决这个问题,人们提出了高斯混合模型(GMM),顾名思义,就是数据可以看作是从数个高 斯分布中生成出来的.虽然我们可以用不同的分布来随意地构造 XX Mixt

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

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

混合高斯模型

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

EM算法与混合高斯模型

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

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

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

混合高斯模型(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}可以选取.而且我们认为在给定后,满足多值高斯

混合高斯模型的EM求解(Mixtures of Gaussians)及Python实现源码

今天为大家带来混合高斯模型的EM推导求解过程. 全部代码如下! def NDimensionGaussian(X_vector,U_Mean,CovarianceMatrix): #X=numpy.mat(X_vector) X=X_vector D=numpy.shape(X)[0] #U=numpy.mat(U_Mean) U=U_Mean #CM=numpy.mat(CovarianceMatrix) CM=CovarianceMatrix Y=X-U temp=Y.transpose()