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=1∑N​cm​N(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)
结果显示:



高斯混合模型聚类(GMM)matlab实现相关推荐

  1. 高斯混合模型(GMM)实现和可视化

    高斯分布公式及图像示例 高斯分布概率密度热力图 高斯混合模型实现代码 高斯混合模型聚簇效果图 参考文献 作者:金良(golden1314521@gmail.com) csdn博客: http://bl ...

  2. 高斯混合模型(GMM)浅入理解

    学习的资料主要是看大佬的一些博客和李航老师的统计学习第九章,感谢! 其中有篇笔记让小匹眼前一亮,这里贴出来: 知乎_戴文亮_高斯混合模型(GMM) 进入正题 目录 1.1 概念理解 1.2 隐变量 1 ...

  3. 【机器学习笔记11】高斯混合模型(GMM)【上篇】原理与推导

    文章目录 推荐阅读 前言 高斯混合模型简介 GMM与K-mean 高斯混合模型的概率密度函数 几何角度 混合模型角度 可能会弄混的地方 隐变量的分布与隐变量的后验概率分布 极大似然估计 EM算法求近似 ...

  4. 高斯混合模型(GMM)及其EM算法的理解

    一个例子 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同 ...

  5. 高斯混合模型(GMM)

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

  6. matlab 高斯混合模型 多分类,matlab – 了解高斯混合模型的概念

    如果您先看看 GMM型号代表什么,我认为这将有所帮助.我将从 Statistics Toolbox使用 functions,但您应该能够使用VLFeat做同样的事情. 我们从两个一维normal di ...

  7. 高斯混合模型聚类实战(Gaussian Mixtures)

    高斯混合模型聚类实战(Gaussian Mixtures) 目录 高斯混合模型聚类实战(Gaussian Mixtures) 高斯混合模型构建

  8. 高斯混合模型聚类算法和K-Means聚类算法

    高斯混合模型聚类算法 概念:混合高斯模型就是指对样本的概率密度分布进行估计,而估计的模型是几个高斯模型加权之和(具体是几个要在模型训练前建立好).每个高斯模型就代表了一个类(一个Cluster).对样 ...

  9. 利用Python实现高斯混合模型(GMM)

    前言 之前将网易公开课上吴恩达机器学习视频中高斯混合模型(GMM)及其EM算法反反复复看了几遍之后并将所有公式重新推导了一遍,现在利用Python进行手写进一步加深理解.关于吴恩达机器学习中相关讲义请 ...

最新文章

  1. 教你识别:虚拟内存和物理内存的区别
  2. php图片自动裁剪工具,php图片自动裁剪工具,解决图片变形问题,缩略图问题
  3. iptables一次性封多个ip,使用ipset 工具
  4. LeetCode-80: 删除排序数组中的重复项 II
  5. Codeforces Round #658 (Div. 2)
  6. LeetCode 874. 模拟行走机器人(set)
  7. 程序员的第一份实习!附面试初体验
  8. 演练 构造函数的显示调用与隐式调用 c# 1613715344
  9. 每天进步一点点《ML - 异常点检测》
  10. kafka 的pom文件_Flink 消费 Kafka 数据
  11. arm linux装wine,Ubuntu下安装wine详细介绍
  12. C#基础知识之图解TCP IP》读书笔记
  13. 淘宝开源的代码质量检测工具,太强大了!!
  14. Objective-C 高性能的循环
  15. 水利知识库AI助手+公务员资料【产品经理】
  16. C语言谭浩强第三版第九章例题及课后题:预处理命令
  17. 新版 Win10 来了!网友:要被丑哭了。。。
  18. mysql生产cdm文件_PowerDesigner 概念数据模型(CDM) 说明
  19. redis常见问题及解决方案
  20. [Android] ListView实现隔行变色(一)

热门文章

  1. 视频融合平台EasyCVR如何下载指定时间段的录像文件?
  2. lego let‘s encrypt 证书
  3. 9、国内代码托管中心-码云
  4. 流媒体服务器搭建总结
  5. Cookie知多少?
  6. HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】
  7. Syzmlw 赵氏孤儿高清
  8. 信仰坚持!程序员也有春天!
  9. 2020自建太阳能系统,一年使用总结
  10. java换行符如何使用