高斯混合模型聚类(GMM)matlab实现

article/2025/10/12 5:50:58

Gaussian Mixture Model ,就是假设数据服从 Mixture Gaussian Distribution ,换句话说,数据可以看作是从数个 Gaussian Distribution 中生成出来的。实际上,我们在 K-means 和 K-medoids 两篇文章中用到的那个例子就是由三个 Gaussian 分布从随机选取出来的。实际上,从中心极限定理可以看出,Gaussian 分布(也叫做正态 (Normal) 分布)这个假设其实是比较合理的,除此之外,Gaussian 分布在计算上也有一些很好的性质,所以,虽然我们可以用不同的分布来随意地构造 XX Mixture Model ,但是还是 GMM 最为流行。另外,Mixture Model 本身其实也是可以变得任意复杂的,通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布。

每个 GMM 由 个 Gaussian 分布组成,每个 Gaussian 称为一个“Component”,这些 Component 线性加成在一起就组成了 GMM 的概率密度函数:
P ( x ∣ θ ) = ∑ n = 1 N c m N ( x ∣ θ m ) P(x | \theta)=\sum_{n=1}^{N} c_{m} \mathrm{N}\left(x | \theta_{m}\right) P(xθ)=n=1NcmN(xθm)
其中Cm是权重,X是样本,θm表示第m个子模型的参数集,包含平均值以及协方差 ( μ m , Σ n ) \left(\mu_{m}, \Sigma_{n}\right) (μm,Σn)
根据上面的式子,如果我们要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数 ,选中了 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为了已知的问题。

那么如何用 GMM 来做 clustering 呢?其实很简单,现在我们有了数据,假定它们是由 GMM 生成出来的,那么我们只要根据数据推出 GMM 的概率分布来就可以了,然后 GMM 的 个 Component 实际上就对应了 个 cluster 了。根据数据来推算概率密度通常被称作 density estimation ,特别地,当我们在已知(或假定)了概率密度函数的形式,而要估计其中的参数的过程被称作“参数估计”。

matlab代码如下:
%% 初始化工作空间
clc
clear all
close all%% 载入数据
load fisheriris%% 二维数据
% 叶子长度和叶子宽度散点图(真实标记)
figure;
speciesNum = grp2idx(species);
gscatter(meas(:,3),meas(:,4),speciesNum,['r','g','b'])
xlabel('叶子长度')
ylabel('叶子宽度')
title('真实标记')
set(gca,'FontSize',12)
set(gca,'FontWeight','bold')% 叶子长度和叶子宽度散点图(无标记)
figure;
scatter(meas(:,3),meas(:,4),150,'.')
xlabel('叶子长度')
ylabel('叶子宽度')
title('无标记')
set(gca,'FontSize',12)
set(gca,'FontWeight','bold')%% 高斯混合模型聚类
data = [meas(:,3), meas(:,4)];%  手动初始条件
Mu=[0.25 1.5; 4.0 1.25; 5.5 2.0 ];%平均值设定
Sigma(:,:,1) = [1 1;1 2];%方差设定
Sigma(:,:,2) = [1 1;1 2];
Sigma(:,:,3) = [1 1;1 2];
Pcom=[1/3 1/3 1/3];%混合比例
S = struct('mu',Mu,'Sigma',Sigma,'ComponentPropotion',Pcom);
GMModel = fitgmdist(data,3,'Start',S);% 分类
T1 = cluster(GMModel,data);% 标号调整
cen=[mean(data(T1==1,:));...mean(data(T1==2,:));...mean(data(T1==3,:))];
dist=sum(cen.^2,2);
[dump,sortind]=sort(dist,'ascend');
newT1=zeros(size(T1));
for i =1:3newT1(T1==i)=find(sortind==i);
end% 叶子长度和叶子宽度散点图(真实标记:实心圆+kmeans分类:圈)
figure;
gscatter(meas(:,3),meas(:,4),speciesNum,['r','g','b'])
hold on
gscatter(data(:,1),data(:,2),newT1,['r','g','b'],'o',10)
scatter(cen(:,1),cen(:,2),300,'m*')
hold off
xlabel('叶子长度')
ylabel('叶子宽度')
title('真实标记:实心圆+kmeans分类:圈')
set(gca,'FontSize',12)
set(gca,'FontWeight','bold')%% 混淆矩阵 ConfusionMatrix
T2ConfMat=confusionmat(speciesNum,newT1)
error23=(speciesNum==2)&(newT1==3);
errDat23=data(error23,:)
error32=(speciesNum==3)&(newT1==2);
errDat32=data(error32,:)%% 高斯模型等高线图
% 散点图
figure;
gscatter(meas(:,3),meas(:,4),speciesNum,['r','g','b'])
hold on
scatter(cen(:,1),cen(:,2),300,'m*')
hold off
xlabel('叶子长度')
ylabel('叶子宽度')
title('高斯模型等高线图')
set(gca,'FontSize',12)
set(gca,'FontWeight','bold')
% 叠加等高线
haxis=gca;
xlim = get(haxis,'XLim');
ylim = get(haxis,'YLim');
dinter=(max([xlim, ylim]) - min([xlim, ylim]))/100;
[Grid1, Grid2] = meshgrid(xlim(1):dinter:xlim(2), ylim(1):dinter:ylim(2));
hold on
GMMpdf=reshape(pdf(GMModel, [Grid1(:) Grid2(:)]), size(Grid1,1), size(Grid2,2));
contour(Grid1, Grid2, GMMpdf, 30);
hold off% 混合高斯模型曲面图
figure;
surf(GMMpdf)
xlabel('叶子长度')
ylabel('叶子宽度')
title('高斯混合模型曲面图')
view(-3,65)
结果显示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/TXAOaWUv.shtml

相关文章

混合模型简介与高斯混合模型

高斯混合模型 混合模型概述 In statistics, a mixture model is a probabilistic model for representing the presence of subpopulations within an overall population, without requiring that an observed data set should identify the sub-population to which an indi…

GMM高斯混合模型

GMM高斯混合模型 一、GMM简介 GMM 全称是高斯混合模型,顾名思义,其本质就是将n个高斯模型混合叠加在一起,主要用处是用来作异常检测,聚类等;优点就是可解释性好,在低维数据上有着不错的效果; …

matlab构建高斯混合模型,使用matlab创建高斯混合模型及绘图

Matlab提供了根据几个独立的高斯模型创建Gaussian Mixture Model(GMM)的函数,即fitgmdist。关于该模型的具体使用方法以及绘制生成的GMM的图形的方法,如下代码所示: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

使用高斯混合模型的点云配准

最近在学习基于概率模型的点云配准方法,上一篇中学习的是基于NDT(Normal Distribution Transform)的点云配准方法,其中关键是将点云进行体素单元格划分,并将每个体素单元格用一个概率密度函数表示。 今天读了另一篇论…

sklearn之高斯混合模型

什么是高斯分布? 高斯分布也叫正态分布,也就是常态分布,什么意思呢?比如说男性的身高,假如说有10000个男性的身高,如果再坐标系上标记出来就是一个正态分布,如果形状还不是和上面的图形一样&am…

基于高斯混合模型的目标检测算法matlab仿真

目录 一、理论基础 二、核心程序 三、仿真结论 一、理论基础 高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。 对图像背景建立…

高斯混合模型 GMM 的详细解释

高斯混合模型(后面本文中将使用他的缩写 GMM)听起来很复杂,其实他的工作原理和 KMeans 非常相似,你甚至可以认为它是 KMeans 的概率版本。 这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多…

高斯混合模型学习笔记

高斯混合模型学习笔记 根据师兄(王延凯的博客)以及其他博主大佬的总结学习高斯混合模型,自己也作一下学习记录。 目录 高斯混合模型学习笔记1、模型介绍2、模型求解步骤举个栗子通用背景模型UBM[\[2\]](https://blog.csdn.net/weixin_44278…

机器学习笔记之高斯混合模型(一)模型介绍

机器学习笔记之高斯混合模型——模型介绍 引言高斯混合模型介绍示例介绍从几何角度观察高斯混合模型从混合模型的角度观察 概率混合模型的引出从概率生成模型的角度观察高斯混合模型 引言 上一系列介绍了EM算法,本节将介绍第一个基于EM算法求解的概率生成模型——高…

图像处理之高斯混合模型

一、高斯混合模型 现有的图像中目标的分类常用深度学习模型处理,但是深度学习需要大量模型处理。对于明显提取的目标,常常有几个明显特征,利用这几个明显特征使用少量图片便可以完成图像目标分类工作。这里介绍使用高斯混合模型GMM处理图像。…

机器学习 高斯混合模型

高斯混合模型 前言高斯混合模型高斯分布混合模型高斯模型单高斯模型高斯混合模型高斯混合模型训练EM算法 应用图像背景的高斯混合模型智能监控系统 参考 前言 之前在一次技术讨论当中,针对文本处理的时候被问到高斯混合模型。当时我对“高斯混合模型”都是比较懵圈…

高斯混合模型GMM

1. 高斯混合模型概念 高斯混合模型(Gaussian Mixture Model)是一种聚类算法,它是多个高斯分布函数的线性组合,通常用于解决同一集合下的数据包含多种不同的分布情况。 2.高斯混合模型的一个例子 在校园里随机抽取2000个学生&#…

高斯混合模型

一、什么是高斯混合模型(GMM) 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,通常用于解决同一集合下的数据包含多个不同的分布的情况,如解决分类情况 如下图,明显分成两…

【技术分享】高斯混合模型

本文原作者:尹迪,经授权发布。 原文链接:https://cloud.tencent.com/developer/article/1480731 导语:现有的高斯模型有单高斯模型(SGM)和高斯混合模型(GMM)两种。从几何上讲&#…

高斯混合模型(GMM)

高斯混合模型 k-means 聚类模型非常简单并且易于理解,但是它的简单性也为实际应用带 来了挑战。特别是在实际应用中,k-means 的非概率性和它仅根据到簇中心点的距离来指 派簇的特点将导致性能低下。这一节将介绍高斯混合模型,该模型可以被看…

机器学习笔记 - 什么是高斯混合模型(GMM)?

1、高斯混合模型概述 高斯混合模型 (GMM) 是一种机器学习算法。它们用于根据概率分布将数据分类为不同的类别。高斯混合模型可用于许多不同的领域,包括金融、营销等等!这里要对高斯混合模型进行介绍以及真实世界的示例、它们的作用以及何时应该使用GMM。 高斯混合模型 (GMM) …

机器学习算法(二十九):高斯混合模型(Gaussian Mixed Model,GMM)

目录 1 混合模型(Mixture Model) 2 高斯模型 2.1 单高斯模型 2.2 高斯混合模型 3 模型参数学习 3.1 单高斯模型 3.2 高斯混合模型 4 高斯混合模型与K均值算法对比 1 混合模型(Mixture Model) 混合模型是一个可以用来表示在总…

重启虚拟机异常:Unmount and run xfs_repair

重启虚拟机异常:Unmount and run xfs_repair 解决办法: 原因:看出来应该是sda3分区损坏,修复就可以了 1:启动虚拟机E进入单用户模式 2:在linux16开头的哪一行后面添加rd.break,ctrlx进入救援模式…

Unmount and run xfs_repair

开启虚拟机报错:Unmount and run xfs_repair 从错误可以查看到是vda3错误。 解决办法: 1、umount /dev/vda3 2、xfs_repair -L /dev/vda3 3、reboot 就ok了。

Linux mount/unmount命令

开机自动挂载 如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。 文件挂载的配置文件:/etc/fstab 查看此文件可知 每行定义一个要挂载的文件系统; 其每行的格式如下 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项…