PyTorch深度学习实战 | 高斯混合模型聚类原理分析

news2024/12/29 9:36:03

01、问题描述

为理解高斯混合模型解决聚类问题的原理,本实例采用三个一元高斯函数混合构成原始数据,再采用GMM来聚类。

1) 数据

三个一元高斯组件函数可以采用均值和协方差表示如表1所示:

▍表1 三个一元高斯组件函数的均值和协方差

每个高斯组件函数分配不同的权重,其中1号组件权重为30%, 2号组件权重为50%,3号组件权重为20%,随机生成1000个样本数据。

2) 可视化

为了理解三个高斯组件函数是如何混合的,可以将三个一元高斯函数显示在二维坐标中,显示三个高斯组件函数的钟形图。然后,三个组件按照权重比率混合,显示三个组件函数混合后的图形。

3) 聚类

为了找到混合后的数据属于哪一个组件,可以采用聚类的方法来对数据分类。聚类后给每个数据分配1,2或者3其中的一个标签,回顾在混合三个高斯函数时的顺序,对于1000个样本数据,是否对应前300个属于1号组件,正确标签应该为1,中间500个属于2号组件,正确标签应该为2,最后200个属于3号组件,正确标签应该为3,查看聚类后得到分类标签的准确率。

02、实例分析参考解决方案

数据生成MATLAB/Octave参考代码:

mu1=[-1];
mu2=[0];
mu3=[3];
sigma1=[2.25];
sigma2=[1];
sigma3=[.25];

每个高斯组件函数分配不同的权重,其中1号组件权重为30%, 2号组件权重为50%,3号组件权重为20%,随机生成1000个样本数据,MATLAB代码如下所示:

weight1=[.3];
weight2=[.5];
weight3=[.2];
component_1=mvnrnd(mu1,sigma1,300);
component_2=mvnrnd(mu2,sigma2,500);
component_3=mvnrnd(mu3,sigma3,200);
X=[component_1;component_2;component_3];

三个一元高斯函数显示在二维坐标中,MATLAB代码如下所示:

gd1=exp(-0.5*((component_1-mu1)/sigma1).^2)/(sigma1*sqrt(2*pi));
gd2=exp(-0.5*((component_2-mu2)/sigma2).^2)/(sigma2*sqrt(2*pi));
gd3=exp(-0.5*((component_3-mu3)/sigma3).^2)/(sigma3*sqrt(2*pi));
figure;
plot(component_1,gd1,'.');hold on;
plot(component_2,gd2,'.');hold on;
plot(component_3,gd3,'.');
title('Bell cureves of three components');
xlabel('Randomly produced numbers');ylabel('Gauss distribution');

运行以上代码后,可看到三个组件函数的钟形图如图1所示。

▍图1 三个一元高斯函数的钟形图

三个组件按照权重比率混合,MATLAB代码如下所示:

gm1=gmdistribution.fit(X,3);
a=pdf(gm1,X);
figure;plot(X,a,'.');
title('Curve of Gaussian mixture distribution');
xlabel('Randomly produced numbers');
ylabel('Gauss distribution');

运行以上代码,获得三个组件混合后的图形如图2所示。

▍图2 三个一元高斯函数混合后的图形

为了找到混合后的数据属于哪一个组件,可以采用聚类的方法来对数据分类,MATLAB实现代码如下:

idx=cluster(gm1,X);

聚类后给每个数据分配1,2或者3其中的一个标签,回顾在混合三个高斯函数时的顺序,对于1000个样本数据,前300个属于1号组件,正确标签应该为1,中间500个属于2号组件,正确标签应该为2,最后200个属于3号组件,正确标签应该为3,聚类结果后得到分类标签的准确率可以采用如下代码来查看:

figure;
hold on;
for i=1:1000
ifidx(i)==1
plot(X(i),0,'r*');
elseifidx(i)==2
plot(X(i),0,'b+');
else
plot(X(i),0,'go');
    end
end
title('Plot illustrating the cluster assignment');
xlabel('Randomly produced numbers');
ylim([-0.1 0.1]);

03、运行结果

运行代码聚类结果如图3所示,可以看出,绝大部分的数据被分配到正确的标签,也存在少数错误分类。

▍图3 高斯混合模型聚类结果分析

04、代码

https://www.jianguoyun.com/p/Ddr2dTYQ9of0Chiko_4EIAA

05、文末送书

内容简介

Web3正频繁出现在公众视野中,然而受阻于晦涩难懂的技术原理及陌生又拗口的专业术语,很多人对此望而却步。本书试图用通俗的语言、简单的结构、翔实的案例让零基础的读者迅速掌握Web3的核心要义。

Web3不仅仅是技术和金融语境,它和每个人的生活都息息相关。作为深耕Web3的研究机构,Inverse DAO将带你通过纵向时间线、横向技术线来立体、客观、完整地理解Web3。通过本书你既可以快速读懂行业,也可以躬身实践参与。

希望本书可以抛砖引玉,启迪你的智慧之光,发现Web3更多、更广、更深的奥秘,助你在新的科技浪潮下,无往而不胜。

作者简介

Anymose,中国人民大学传播学硕士,Inverse DAO(Web3投资研究机构)发起人,曾供职知名风险资本分析师,具有丰富的Web3理论研究、项目投资、运营实践经验,帮助Qredo、Fetch、Gitcoin等诸多项目进行新一代信息化建设。

参与方式:文章三连并评论“珍爱生命,远离加班”,参与抽奖,送出2本技术图书《从零开始读懂Web3》,24小时后,公布抽奖结果!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git的使用——操作流程

一、什么是git git是一个开源的分布式版本控制软件,能够有效并高效的处理很小到非常大的项目。 二、添加SSH公钥 安装下载后,会发现鼠标右击,会出现 Git Bash Here 这个选项,如图所示,点击进入 1.打开git窗口后&…

018:Mapbox GL加载Google地图(影像瓦片图)

第018个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载google地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xia…

鉴智机器人重磅发布双目智驾解决方案,新一代全系智驾产品线亮相上海车展

4月18日,以「拥抱汽车行业新时代」为主题的2023上海车展正式拉开帷幕。以视觉3D理解为核心的下一代自动驾驶系统提供商鉴智机器人,携全新升级的智驾产品线首次亮相车展,重磅发布基于AI的双目立体视觉智驾方案。 凭借双目立体视觉系统的差异化…

智能洗地机好用吗?值得入手的洗地机推荐

洗地机是一款高效的地面清洁设备,不仅可以很好清理地面不同形态的干湿垃圾,还减少了人工和水资源的浪费,是我们日常生活中必不可少的清洁工具。作为以一位评测博主,很多朋友咨询我在选购洗地机时应该注意哪些要点,有哪…

记一次生产要我狗命的问题

问题起因:引入disruptor框架 简单理解就是生产消费者模式 用来支持高并发 先说问题和改正 再展开 问题:没有当时的截图了 直接描述吧 问题就是cpu占用过高 居高不下的那种 排查:就是看线程名字和占用的大概 再根据近期发布的东西 再根据本地…

学系统集成项目管理工程师(中项)系列08b_合同管理(下)

1. 项目变更约定 1.1. 合同生效后,当事人不得因姓名、名称的变更或者法定代表人、负责人、承办人的变动而不履行合同义务 2. 违约责任的承担方式 2.1. 继续履行 2.2. 采取补救措施 2.3. 赔偿损失 2.4. 支付约定违约金或定金 3. 注意事项 3.1. 当事人的法律资…

Linux FTP服务

FTP服务 作用 传输文件 端口 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信 20端口用于建立数据连接,并传输文件数据 21端口用于建立控制连接,并传输FTP控制命令 模式 FTP数据连接分为主动模式和被动模式 主动模式:客户端告诉服务端…

电路原理-反激式电路

1、1反激式电路是小功率电源(150W以下)当中,最常用的电路,它的工作原理如下。 1、2如图1,变压器T1,标记红点的端,12、3、A为同名端,10、1、B为异名端。 当MOS管导通的时候,初级绕组N1、…

瑞吉外卖LinuxRedis

1、linux简介 Linux系统版本 Linux系统分为内核版和发行版 内核版: 由LinusTorvalds及其团队开发、维护 免费、开源 负责控制硬件 发行版: 基于Linux内核版进行扩展 由各个Linux厂商开发、维护 有收费…

C++类的理解与类型名,类的成员,两种定义方式,类的访问限定符,成员访问,作用域与实例化对象

面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 面向…

ETCD(三)操作指令

1. put put #将给定的key写入到存储 --ignore-lease[false] #使用当前租约更新key --ignore-value[false] #使用当前值更新key --lease"0" # 要附加到key的租约ID(十六进制) --prev-kv[false] # 返回修改前的上一个键值对2. get get #获取给…

无线洗地机哪款性价比高?高性价比的洗地机分享

虽说现在市面上清洁工具很多,但是要说清洁效果最好的,肯定非洗地机莫属。它集合了吸,洗,拖三大功能,干湿垃圾一次清理,还能根据地面的脏污程度进行清洁,达到极致的清洁效果,省时省力…

4月21日第壹简报,星期五,农历三月初二

4月21日第壹简报,星期五,农历三月初二坚持阅读,静待花开1. 推特拒向大模型免费开放数据!马斯克威胁起诉微软;Reddit宣布不再向大模型免费开放数据,要求科技巨头付费使用API接口。2. 浙江:鼓励杭…

【JUC】Java并发机制的底层实现原理

【JUC】Java并发机制的底层实现原理 参考资料: CPU 缓存一致性 《Java并发编程的艺术》 【JUC并发编程】CAS到底加不加锁? 如何写出让 CPU 跑得更快的代码? 彻底理解Java并发编程之Synchronized关键字实现原理剖析 【JUC并发编程】Synchroni…

线程安全版本的单例设计模式 与 生产者消费者模型简介

目录 单例设计模式 单例设计模式——饿汉式 单例设计模式——懒汉式 单例设计模式——懒汉式(优化步骤) 生产者消费者模型 介绍 优点 补充:关于阻塞队列 单例设计模式 单例设计模式能够保证某个类的实例在程序运行过程中始终都只会存…

代码随想录Day57

1143.最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字…

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层 遇到问题初始化底图初始化高程(监听载入完成事件,开启关闭高程)初始化 3dtile Cesium 最新版(1.104.0)变…

2021地理设计组二等奖:基于地理大数据的南昌中心城区空间功能感知与分区

一、设计背景及意义 随着经济快速发展,城市功能类型也越来越多,在空间上逐渐聚集和演化,形成了居住区,商业区等城市功能区,而这些功能区没有明显边界,确定困难,如使用传统人力调查方法费时费力…

PHP快速入门16-用curl发起POST和GET的请求

文章目录 前言curl介绍发送GET请求发送POST请求其他选项 总结 前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 在Web开发中,经常需要与其他服务器进行数据交互。而现在,绝大多数的接口都是基于HTTP协议的,因此我们需要学会…

Spring MVC的功能

1. 连接功能 1.1几种注解 RequestMapping最常用的注解之一,作用是用来路由注册(注册接口的路由映射),即可修饰类也能修饰方法,默认情况下的RequestMapping即可接收Get请求也可以接收Post请求。也可以通过设置method来…