基于python的层次聚类

news2024/11/22 22:49:41

目录

一、层次聚类概述

二、凝聚法(Agglomerative Clustering)

        1. 初始化

        2. 计算距离

        3. 合并簇

        4. 重复迭代

三、分裂法(Divisive Clustering)

        1. 初始化

        2. 分裂簇

        3. 分配样本点

        4. 重复迭代

四、其他考虑因素

五、总结

六、代码

七、运行结果


一、层次聚类概述

        层次聚类是一种无监督学习算法,它通过分析数据点之间的相似性或距离来构建层次化的聚类结构。这种聚类方法能够展示数据集的内在层次关系,为理解数据的复杂结构提供有力工具。

二、凝聚法(Agglomerative Clustering)

        1. 初始化

        在凝聚法中,每个数据点最初都被视为一个单独的簇。这意味着,如果有n个数据点,那么初始时就有n个簇。

        2. 计算距离

        接下来,算法需要计算各簇之间的距离。常用的距离度量方式包括最小距离(单链接)、最大距离(全链接)和平均距离(平均链接)。

  • 最小距离(单链接)

                                             d_{\min}(C_i, C_j) = \min_{x \in C_i, z \in C_j} \text{dist}(x, z)
        其中,C_{i}和 C_{j}​ 是两个簇,x 和 z 分别是这两个簇中的样本点,dist(x,z) 是样本点 x 和 z 之间的距离(通常使用欧氏距离)。最小距离由两个簇中最近的样本点决定。

  • 最大距离(全链接)
                                         d_{\max}(C_i, C_j) = \max_{x \in C_i, z \in C_j} \text{dist}(x, z)
    最大距离由两个簇中最远的样本点决定。

  • 平均距离(平均链接)
                                   d_{\text{avg}}(C_i, C_j) = \frac{1}{|C_i| \cdot |C_j|} \sum_{x \in C_i} \sum_{z \in C_j} \text{dist}(x, z)
    平均距离由两个簇中所有样本点共同决定,其中 \left | C_{i} \right |和 \left | C_{j} \right |  分别是簇 C_{i}和 C_{j}​ 的样本数。

        3. 合并簇

        在计算出各簇之间的距离后,算法会选择距离最近的两个簇进行合并。合并后的新簇将包含原来两个簇的所有样本点,并作为一个新的簇参与后续的计算。

        4. 重复迭代

        算法将重复执行计算距离和合并簇的步骤,直到所有数据点都被合并成一个簇,或者达到预设的聚类数目。在每一步迭代中,聚类树都会增加一层,展示当前的数据聚类状态。

三、分裂法(Divisive Clustering)

        分裂法与凝聚法相反,它从一个包含所有数据点的大簇开始,逐步分裂成更小的簇。

        1. 初始化

        将所有数据点归为一个簇。

        2. 分裂簇

        在簇内部,算法会计算任意两个样本点之间的距离,并找到距离最远的两个样本点。这两个样本点将被视为两个新的聚类中心,原簇将被分裂成两个子簇。

        3. 分配样本点

        接下来,算法会计算原簇中剩余样本点到这两个新聚类中心的距离,并将每个样本点归入离其最近的一个聚类中心所对应的子簇中。

        4. 重复迭代

        算法将重复执行分裂簇和分配样本点的步骤,直到每个簇只包含一个数据点,或者达到预设的聚类数目。在每一步迭代中,聚类树都会减少一层,展示数据的逐步分裂过程。

四、其他考虑因素

  • 距离度量:除了上述的欧氏距离外,还可以使用其他距离度量方式(如曼哈顿距离、余弦距离等)来计算样本点之间的距离。
  • 停止条件:除了预设的聚类数目外,还可以根据其他条件(如簇间距离阈值、聚类质量评估指标等)来停止聚类过程。
  • 优化算法:由于层次聚类的计算量较大,特别是对于大规模数据集,因此可能需要采用一些优化算法(如采样、近似计算等)来提高计算效率。

五、总结

层次聚类通过构建层次化的聚类结构来展示数据的内在关系。凝聚法和分裂法是层次聚类的两种主要策略,它们分别通过合并和分裂簇来

六、代码

import pandas as pd  
from scipy.cluster.hierarchy import dendrogram, linkage  
from sklearn.preprocessing import StandardScaler  
import matplotlib.pyplot as plt  
  
# 步骤1: 读取数据  
df = pd.read_excel('dataset.xlsx')  
  
# 只使用数值型特征进行聚类  
# 筛选出数值型列  
numeric_columns = df.select_dtypes(include=['int64', 'float64']).columns  
data = df[numeric_columns].values  
  
# 步骤2: 数据预处理(进行标准化)  
scaler = StandardScaler()  
data_scaled = scaler.fit_transform(data)  
  
# 步骤3: 应用层次聚类  
# 使用ward方法,可以尝试其他方法如'single', 'complete', 'average', 'centroid', 'median', 'ward'  
linked = linkage(data_scaled, 'ward')  

# 步骤4: 可视化dendrogram并保存为高清PNG  
plt.figure(figsize=(10, 7), dpi=2000)  # 设置高DPI以获得更高的图像质量  
# 使用简单的索引作为标签(如果样本数不多)  
if len(data_scaled) <= 100:  # 只在样本数不多时显示标签  
    labels = range(len(data_scaled))  
else:  
    labels = None  # 如果样本数很多,则不显示标签  
  
dendrogram(linked,  
           orientation='top',  
           labels=labels,  # 使用简单的索引或None  
           distance_sort='descending',  
           show_leaf_counts=True)  
plt.title('Dendrogram of Hierarchical Clustering')  
plt.xlabel('Sample index')  
plt.ylabel('Distance')  
plt.tight_layout()  # 避免标签和标题与图形重叠  
plt.savefig('dendrogram_high_res.png', dpi=2000)  # 保存高清图像  
plt.show()  # 显示图像

七、运行结果

图3-1 树状图

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

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

相关文章

51、数据库的概念及sql语句

1、数据库 1.1、数据库管理&#xff1a; sql语句 数据库用来增删改查的语句。重要* 备份 数据库的数据进行备份。 主从复制&#xff0c;读写分离 高可用。重要*&#xff0c;原理–面试。 数据库的概念、语法和规范 1.2、数据库的定义 数据库&#xff1a;组织&#xff0c…

ACL实验

目录 一、实验拓扑​编辑 二. 实验要求&#xff08;在图中&#xff09; 三、实验思路 配IP 全网可达 创建模拟机pc1 创建telent r1 r2 由题目可得 截图 pcr1​编辑 pcr2​编辑 四、实验总结&#xff08;写实验完成后的总结心得&#xff09; 一、实验拓扑 二. 实验…

硅纪元AI应用推荐 | 精准识别用户意图,夸克真AI搜索引擎

“硅纪元AI应用推荐”栏目&#xff0c;为您精选最新、最实用的人工智能应用&#xff0c;无论您是AI发烧友还是新手&#xff0c;都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能&#xff0c;开启智慧新时代&#xff01; 在数字化时代&#xff0c;搜索引擎成为我…

本地多模态看图说话-llava

其中图片为bast64转码&#xff0c;方便json序列化。 其中模型llava为本地ollama运行的模型&#xff0c;如&#xff1a;ollama run llava 还有其它的模型如&#xff1a;llava-phi3&#xff0c;通过phi3微调过的版本。 实际测试下来&#xff0c;发现本地多模型的性能不佳&…

EasyPoi一对多excel表格导出

效果如下图&#xff1a; 1、引入pom文件 <!--easypoi 一对多导入导出 --> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version> </dependency> <dependenc…

AIGC降痕实战:论文降AI率的深度解析与应用

随着AI技术的飞速发展&#xff0c;AI论文工具正逐渐成为学术界的新宠。它们以高效、便捷的优势&#xff0c;吸引了众多学者的目光。然而&#xff0c;随之而来的学术诚信与原创性问题&#xff0c;也成为人们关注的焦点。 如何在享受AI带来的便利的同时&#xff0c;确保论文的原…

pear-admin-fast项目修改为集成PostgreSQL启动

全局搜索代码中的sysdate()&#xff0c;修改为now() 【前者是mysql特有的&#xff0c;后者是postgre特有的】修改application-dev.yml中的数据库url使用DBeaver把mysql中的数据库表导出csv&#xff0c;再从postgre中导入csv脚本转换后出现了bpchar(xx)类型&#xff0c;那么一定…

《数字通信世界》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《数字通信世界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第二批认定学术期刊。 问&#xff1a;《数字通信世界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;工业和信息化部 主办单位&#x…

ubuntu22.04安装SecureCRT8.7.3,完成顺利使用

材料准备 scrt-sfx安装包 &#xff0c; securecrt_linux_crack.pl 补丁脚本&#xff0c;和两个依赖库 其中securecrt_linux_crack.pl是找的专门适合 8.7.3版本的&#xff0c;网上很多版本的crack.pl只能打补丁以前的老版本。 而更老版本的SecureCRT对ubuntu22支持更不好&#…

DBeaver导入脚本和导出数据

DBeaver导入脚本和导出数据 前言&#xff1a; 通常产品会要求&#xff0c;把xx表导出Excel&#xff0c;navicat一般公司不让用。讲解使用DBeaver 导入脚本 我们将sql脚本导入DBeaver 1&#xff0c;选择数据库&#xff0c;找到执行脚本 2&#xff0c;选用sql脚本&#xff0…

mavsdk客户端(java)通过mavsdk_server与PX4进行通信

1.启动PX4容器: 2.启动14550与14540监听 3.启动QGC 4.启动mavsdk_server通信中间件 5.启动mavsdk客户端(java) 注:官方示例默认无法连接,修改如下: import io.mavsdk.telemetry.Telemetry;增加设备健康检查才能执行解锁指令Telemetry telemetry = new Telemetry();teleme…

【读书笔】口才三绝

【读书笔记】口才三绝 一、引言二、主要内容概述赞美之绝幽默之绝拒绝之绝 三、个人感悟四、结语我是杰叔叔&#xff0c;一名沪漂的码农&#xff0c;下期再会&#xff01; 一、引言 《口才三绝》是一本专注于提升个人口才与沟通技巧的书籍&#xff0c;它通过丰富的案例和实用的…

macOS Sequoia 15(Macos15系统)v15.0 Beta 3发布 macOS Sequoia 15 功能预览

macOS Sequoia 15 功能预览 犀利一如 Mac macOS Sequoia 15(Macos15系统)v15.0 Beta 3测试版本下载安装 连续互通 你的 Mac 上&#xff0c;iPhone 用起来。 有了 iPhone 镜像功能&#xff0c;在 Mac 上就能看到 iPhone 屏幕画面&#xff0c;还能直接进行操控&#xff0c;不拿…

MySQL存储引擎有哪些?有什么区别?

MySQL存储引擎有哪些&#xff1f;有什么区别 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型。 在mysql中提供了很多的存储引擎&#xff0c;比较常见有InnoDB、My…

FPGA上板项目(二)——PLL测试

目录 实验内容实验原理实验步骤实验结果 实验内容 将差分时钟信号转化为 192MHz 时钟信号作为输出。 实验原理 PLL&#xff0c;即锁相环&#xff0c;一种反馈控制电路&#xff0c;具有时钟倍频、分频、相位偏移和可编程占空比的功能。 实验步骤 添加 clocking wizard IP核&…

Flutter TextFiled频繁采集“剪切板信息”

在使用Flutter开发者&#xff0c;输入框是必不可少的功能&#xff0c;最近产品出了需要&#xff0c;要求输入框记住用户登录过的手机号&#xff0c;并在输入框输入时提示出来&#xff0c;这是个很基础的功能&#xff0c;但是在通过测试验收发布到应用市场时&#xff0c;被Vivo拒…

深圳晶彩智能JC3636W518C开箱实现电脑副屏功能

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的&#xff0c;铝合金外壳&#xff0c;价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派&#xff0c;由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…

SpringBoot中常用的注解及其用法

1. 常用类注解 RestController和Controller是Spring中用于定义控制器的两个类注解. 1.1 RestController RestController是一个组合类注解,是Controller和ResponseBody两个注解的组合,在使 用 RestController 注解标记的类中&#xff0c;每个方法的返回值都会以 JSON 或 XML…

《昇思25天学习打卡营第07天|qingyun201003》

日期 心得 越往后&#xff0c;越看不懂&#xff0c;只能说是有了解到如何去训练模型代码&#xff0c;对于模型代码该如何去保存&#xff0c;如何通过网络模型去训练。只能一步步来&#xff0c;目前来说是推进度&#xff0c;等后面全部有了认知&#xff0c;再回来重新学习 昇思…

Re:从零开始的C++世界——类和对象(中)

文章目录 前言1. 类的默认成员函数2. 构造函数&#x1f34e;概念&#x1f34e;特点&#x1f34c;特点一&#x1f34c;特点二&#x1f34c;特点三&#x1f34c;特点四&#x1f34c;特点五&#x1f34c;特点六&#x1f34c;特性七 &#x1f34e;总结 3.析构函数&#x1f34e;概念…