深入解析:Scikit-learn Python机器学习 - 聚类分析算法 - Agglomerative Clustering(凝聚层次聚类)

news/2025/10/15 17:41:40/文章来源:https://www.cnblogs.com/wzzkaifa/p/19143892

锋哥原创的Scikit-learn Python机器学习视频教程:

https://www.bilibili.com/video/BV11reUzEEPH

课程介绍

本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

Scikit-learn Python机器学习 - 聚类分析算法 - Agglomerative Clustering(凝聚层次聚类)

Agglomerative Clustering(凝聚层次聚类)是一种自底向上的层次聚类方法,属于无监督学习的一种。它通过逐步将最相似的样本合并成一个簇(cluster),最终得到一个包含所有样本的簇,形成一个层次结构(树状图)。与其他聚类方法(如K-means)不同,凝聚层次聚类不需要事先指定簇的数量。

算法原理

凝聚层次聚类的核心思想是基于距离(或相似度)度量来逐步合并样本或簇。

步骤

  1. 初始化: 每个样本初始化为一个簇。

  2. 计算距离: 计算每对簇之间的距离(或相似度)。距离计算方法可以有不同的选择,常见的有:

    • 单链接(Single Linkage): 两个簇之间的最小距离(即簇间最近的两个样本之间的距离)。

    • 完全链接(Complete Linkage): 两个簇之间的最大距离(即簇间最远的两个样本之间的距离)。

    • 均值链接(Average Linkage): 两个簇之间的平均距离。

    • 中心链接(Centroid Linkage): 两个簇之间的中心点距离。

  3. 合并最近的簇: 选择距离最小的两个簇,合并成一个新的簇。

  4. 重复步骤2和3: 不断计算簇间距离并合并,直到所有样本合并为一个簇或达到预设的簇数。

  5. 树状图(Dendrogram): 最终生成的聚类结果可通过树状图表示,显示了不同样本和簇的合并顺序。

凝聚层次聚类的数学公式

我们看一个示例:

假设我们有以下二维数据点:

样本xxyy
A12
B1.51.8
C58
D88
E11

步骤1: 计算每一对数据点之间的距离(例如使用欧几里得距离)。

...(继续计算其他距离)

步骤2: 找到距离最小的两个点或簇。假设 AA 和 BB 之间的距离最小,我们首先将 AA 和 BB 合并为一个簇。

步骤3: 计算新簇与其他数据点的距离,并重复步骤2和3直到所有数据点合并为一个簇。

API介绍

在Scikit-learn中,AgglomerativeClustering 类可以实现凝聚层次聚类。

AgglomerativeClustering(n_clusters=2,              # 最重要的参数:聚类数量*,                         # 后面必须使用关键字参数metric='euclidean',        # 距离度量方法linkage='ward',            # 链接准则distance_threshold=None,   # 距离阈值(替代n_clusters)compute_full_tree='auto',  # 是否计算完整树compute_distances=False    # 是否计算距离
)

核心参数介绍:

  1. n_clusters - 聚类数量

  • 作用:指定最终要形成的簇的数量

  • 类型:int

  • 默认值:2

  1. metric - 距离度量

  • 作用:定义数据点之间的距离计算方法

  • 常用选项

    • 'euclidean':欧几里得距离(默认)

    • 'manhattan':曼哈顿距离

    • 'cosine':余弦距离

  1. linkage - 链接准则

  • 作用:定义簇与簇之间的合并策略

  • 常用选项

    • 'ward':沃德法(默认,最小化方差)

    • 'complete':全链接(最大距离)

    • 'average':平均链接

    • 'single':单链接(最小距离)

  1. distance_threshold - 距离阈值

  • 作用:当簇间距离超过此值时停止合并

  • 类型:float 或 None

  • 注意:设置此参数时,n_clusters 必须为 None

具体示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
import scipy.cluster.hierarchy as sch
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 生成示例数据
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 应用凝聚层次聚类
agg_clustering = AgglomerativeClustering(n_clusters=4, linkage='ward')
y_pred = agg_clustering.fit_predict(X)
# 评估聚类效果
silhouette_avg = silhouette_score(X, y_pred)
print(f"轮廓系数: {silhouette_avg:.3f}")
# 可视化结果
plt.figure(figsize=(15, 5))
# 原始数据
plt.subplot(1, 3, 1)
plt.scatter(X[:, 0], X[:, 1], c=y_true, cmap='viridis')
plt.title('原始数据 (真实标签)')
# 聚类结果
plt.subplot(1, 3, 2)
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis')
plt.title('凝聚层次聚类结果')
# 树状图
plt.subplot(1, 3, 3)
dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))
plt.title('树状图')
plt.xlabel('样本索引')
plt.ylabel('距离')
plt.tight_layout()
plt.show()

运行结果:

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

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

相关文章

多维协同 一键化部署 合规可控的运营商数据安全管理方案

面对日益严苛的法律监管与运营商复杂的数据环境,本文提出了一套“多维协同、一键化部署、合规可控”的运营商数据安全管理方案,并通过中国联通合作实践予以验证——平台上线一年,覆盖上万个 API 接口、实时监测流量…

“一切皆文件”:揭秘LINUX I/O与虚拟内存的底层设计哲学

“一切皆文件”:揭秘LINUX I/O与虚拟内存的底层设计哲学RPC框架如同构建服务大厦的神经网络,承担着海量服务间通信的重任。它优雅地屏蔽了底层网络通信的复杂性,使开发者能聚焦于业务逻辑的创造。然而,在这份优雅之…

学习随笔一:低代码开发与 SQL 核心知识

一、低代码软件开发: 低代码平台通过可视化与模型驱动,重塑了传统软件开发流程。其核心可归纳为三个紧密衔接的阶段,确保从概念到上线的流畅与高效。 (一)低代码开发核心三阶段 以下流程图清晰地展示了这三个阶段…

firewalld和iptables的区别与应用

firewalld 和 iptables 都是 Linux 系统中用于配置网络防火墙的工具,它们都基于内核的 netfilter 框架来过滤网络流量,但在设计理念、配置方式和使用体验上有显著区别。 以下是两者的主要区别:1. 架构与设计理念特性…

视觉定位引导劈刀修磨系统赋能芯片封装

在芯片制造的引线键合工序中,劈刀如同精密的“缝纫针”,负责将微细的金线、银线等准确地连接在芯片和基板之间。劈刀修磨是芯片制造中一项看似微小却至关重要的环节,它是一项对精度要求极高的微细加工,其同轴度精度…

@wraps(func)

@wraps(func) 是 Python 标准库 functools 模块提供的一个装饰器,主要用于保留被装饰函数的元信息(metadata)。当我们使用自定义装饰器包装函数时,被装饰后的函数会丢失原函数的名称、文档字符串等信息,而 @wraps…

antdx 如何接入dify

antdx 如何接入difyimport { UserOutlined } from @ant-design/icons; import { Bubble, Sender, useXAgent, useXChat } from @ant-design/x; import { Flex, type GetProp } from antd; import React from react;con…

递归函数的精确时间统计

import time from functools import wrapsdef recursion_timer(func):"""装饰器:用于统计递归函数的总执行时间"""# 闭包变量:跟踪是否已经开始计时和开始时间is_timing = Falsestart…

[HZOI]CSP-S模拟32

CSP-S模拟32 今天打的要睡着了,根本没有大脑可以思考小 Z 专场!(是谁不重要,无限 %%% )T1 小 Z 爱计数 是 签到题 ,差点挂掉的签到题。 题意:有三种操作(+1、-1、归零),给定 n 个询问,问存不存在一种情况满足…

大素材毕业设计选题推荐-基于大数据的全球经济指标数据分析与可视化环境-Hadoop-Spark-数据可视化-BigData

大素材毕业设计选题推荐-基于大数据的全球经济指标数据分析与可视化环境-Hadoop-Spark-数据可视化-BigData2025-10-15 16:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: n…

D. MAD Interactive Problem

View PostD. MAD Interactive ProblemD. MAD Interactive Problem Problem - D - Codeforces 我们可以进行如下操作: ① 从左到右将 \(i(1 \le i \le 2n)\) 放入 \(s\),然后查询 \(s\),如果答案是某个数字,那么 \(…

在 gitea 服务器端查询 lfs 文件占用情况

1、使用数据库管理工具打开 gitea 的数据库(如 sqlite 模式下:db/gogs.db) 2、执行以下 SQL 语句: SELECTr.owner_name || / || r.name AS repo_name,m.oid,printf(%.2f MB, m.size / 1024.0 / 1024.0) AS size_mb…

HDR图像生成算法详解

HDR技术概述 高动态范围(HDR)图像生成是通过合成多张不同曝光度的图像,来捕捉超出传统显示设备范围的亮度信息。以下是主要的HDR生成算法及其MATLAB实现。 HDR成像基本原理 动态范围定义 动态范围 = 最大可记录亮度…

Introduction: Why Optimization?

在接触凸优化课程当中十分感到头疼,所以在网上搜寻各种资源,发现一位前辈撰写的自己学习凸优化的过程。我的凸优化学习之路 | 韩鼎の个人网站于是想也要慢慢啃下这块难啃的骨头。 引言:为什么要优化? 主要原因是在…

基于MATLAB的二自由度机械臂PID控制仿真

一、动力学建模(拉格朗日方程) 1. 机械臂参数定义 % 机械臂参数(单位:kgm) m1 = 2.0; m2 = 1.5; % 连杆质量 l1 = 0.8; l2 = 0.6; % 连杆长度 I1 = 0.16; I2 = 0.063; % 转动惯量 g = 9.81; % 重力加速度2. 正运动…

Spring AOP原理

目录1. AOP核心概念2. 动态代理机制(1)JDK动态代理(2)CGLIB动态代理3. AOP执行流程4. 与AspectJ的关系总结 Spring AOP(面向切面编程)是Spring框架的核心特性之一,它基于动态代理和字节码增强技术实现,能够在不…

Azure VM (46) 分布式tcping监控

Azure VM (46) 分布式tcping监控《Windows Azure Platform 系列文章目录》具体的项目在我的github里:https://github.com/leizhang1984/pingmesh

Ventoy引导Kali live USB持久化

Ventoy 引导 Kali Live USB 持久化Ventoy 引导 Kali Live USB 持久化Ventoy 介绍 使用 Ventoy 替代 ISO 写盘 Ventoy 数据持久化插件简述 创建 Live 系统持久化文件 创建数据交换分区参考Ventoy 介绍 以下介绍来自 Ven…

知识库管理工具深度测评:ONES、Confluence 等10款工具全面对比

在数字化转型浪潮下,企业越来越重视知识资产的沉淀与共享。根据 Gartner 发布的《Knowledge Management Market Guide 2024》,全球超过85%的中大型组织已经采用知识库管理工具(Knowledge Base Management Tools)来…

从SGD到AdamW:深度学习优化器演进全解析与实践指南

从SGD到AdamW:深度学习优化器演进全解析与实践指南从SGD到AdamW:深度学习优化器演进全解析与实践指南 摘要 在深度学习中,优化器(Optimizer)是连接模型与数据的桥梁,它负责根据损失函数的梯度来更新模型的参数,…