小学生都能懂的局部和全局聚类说明

2024-06-12 21:44

本文主要是介绍小学生都能懂的局部和全局聚类说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小学生都能懂的局部和全局聚类说明

  • 1. 什么是聚类?
  • 2. 什么是局部和全局聚类?
  • 3. 为什么要同时使用局部和全局聚类?
  • 4. 示例解释
    • 4-1. 故事:珠子分类
  • 5. 简单代码示例
  • 6. 解释

1. 什么是聚类?

聚类就是把一大堆东西(数据点)分成几组,每组里面的东西都很相似。比如,我们有很多不同颜色的珠子,想把它们按照颜色分成不同的组。

2. 什么是局部和全局聚类?

  • 全局聚类:把所有的珠子(数据点)整体来看,分成大致几组。就像先把珠子分成红色、蓝色和绿色三大组。
  • 局部聚类:在每个大组里面再进行细分。比如,在红色组里面再分成深红、浅红、粉红等小组。

3. 为什么要同时使用局部和全局聚类?

同时使用局部和全局聚类,可以让我们更好地理解数据:

  • 全局聚类:可以让我们看到数据的整体结构,比如主要有几大类。
  • 局部聚类:可以让我们看到每大类里面的细节,发现更细致的模式。

4. 示例解释

4-1. 故事:珠子分类

假设我们有很多不同颜色的珠子,现在我们想把这些珠子分类。我们会先进行全局聚类,然后在每个大组里进行局部聚类。

  1. 全局聚类:先把珠子分成几个大类

    • 我们把珠子分成三大类:红色、蓝色和绿色。
  2. 局部聚类:在每个大类里面再进行细分

    • 在红色组里面,我们再把珠子分成深红、浅红、粉红。
    • 在蓝色组里面,我们再把珠子分成深蓝、浅蓝、天蓝。
    • 在绿色组里面,我们再把珠子分成深绿、浅绿、黄绿。

这样,我们既可以看到珠子的整体颜色分类(全局),又可以看到每种颜色里面的细节分类(局部)。

5. 简单代码示例

假设我们有一些数据点,先进行全局聚类,再进行局部聚类:

import numpy as np
from sklearn.mixture import GaussianMixture
import umap
import matplotlib.pyplot as plt# 生成一些模拟数据
np.random.seed(42)
data = np.random.rand(100, 5)# 全局聚类
global_gmm = GaussianMixture(n_components=3, random_state=42)
global_labels = global_gmm.fit_predict(data)# 画出全局聚类的结果
reducer = umap.UMAP(n_components=2, random_state=42)
embedding = reducer.fit_transform(data)
plt.scatter(embedding[:, 0], embedding[:, 1], c=global_labels)
plt.title("全局聚类结果")
plt.show()# 局部聚类
local_embeddings = []
local_labels = []
for label in np.unique(global_labels):local_data = data[global_labels == label]local_gmm = GaussianMixture(n_components=2, random_state=42)local_label = local_gmm.fit_predict(local_data)local_embed = reducer.fit_transform(local_data)local_embeddings.append(local_embed)local_labels.append(local_label)# 画出每个全局聚类里面的局部聚类结果
for i, (local_embed, local_label) in enumerate(zip(local_embeddings, local_labels)):plt.scatter(local_embed[:, 0], local_embed[:, 1], c=local_label)plt.title(f"局部聚类结果 (全局组 {i+1})")plt.show()

6. 解释

  1. 数据点:生成一些模拟数据,每个数据点有5个特征。
  2. 全局聚类:使用高斯混合模型(GMM)把数据分成三大类。
  3. 降维:使用UMAP把数据从5维降到2维,以便可视化。
  4. 局部聚类:在每个全局大类里面,再使用GMM进行细分。
  5. 结果展示:画出全局聚类和局部聚类的结果。

通过这个故事和示例,希望你能更好地理解局部和全局聚类的基本概念和它是如何工作的!

这篇关于小学生都能懂的局部和全局聚类说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055422

相关文章

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以