当前位置: 首页 > news >正文

机器学习中的层次聚类(凝聚型)

摘要:层次聚类(凝聚型)是一种自底向上的无监督聚类算法,通过逐步合并最近邻簇构建层次结构。该算法首先将每个样本视为独立簇,然后基于距离度量(如Ward法、单链接法等)迭代合并簇,最终形成树状图。Python实现中,可使用scikit-learn的AgglomerativeClustering和scipy的dendrogram函数进行聚类分析和可视化。虽然算法能直观展示数据层次关系且无需预设簇数,但对距离度量敏感且计算复杂度较高。典型应用包括客户细分、文档聚类等场景。

目录

机器学习中的层次聚类(凝聚型)

一、概述

核心定义

关键步骤

二、层次聚类(凝聚型)算法

三、为何使用层次聚类(凝聚型)?

四、Python 中层次聚类(凝聚型)的实现

(一)导入所需库并加载数据集

(二)构建连接矩阵

(三)可视化树状图

(四)应用聚类算法并提取聚类标签

(五)可视化聚类结果

六、层次聚类(凝聚型)的优势

七、层次聚类(凝聚型)的劣势

八、层次聚类(凝聚型)的应用场景


机器学习中的层次聚类(凝聚型)

一、概述

层次聚类(凝聚型)是一种层次化聚类算法,它以每个数据点作为独立聚类开始,通过迭代方式合并最接近的聚类,直至满足停止条件。这是一种自下而上的方法,会生成树状图(dendrogram)—— 一种类似树的图表,用于展示聚类间的层次关系。该算法可通过 Python 中的 scikit-learn 库实现。

层次聚类(凝聚型)是机器学习中无监督聚类的重要方法,其核心思想是从单个样本出发,逐步合并距离最近的簇,最终形成一棵聚类树(树状图)

核心定义

凝聚型层次聚类(Agglomerative Hierarchical Clustering, AHC)属于 “自底向上” 的聚类策略:

  1. 初始状态下,每个样本都是一个独立的簇
  2. 计算所有簇两两之间的距离,每次将距离最近的两个簇合并为一个新簇
  3. 重复步骤 2,直到所有样本都被合并为一个簇,或者达到预设的聚类数量。

关键步骤

  1. 初始化簇将数据集 D={x1​,x2​,...,xn​} 中的每个样本 xi​ 初始化为一个簇 Ci​={xi​},此时簇的总数为 n。

  2. 定义簇间距离簇间距离的计算方式直接决定聚类结果,常用的方法有 4 种:

    • 单链接法(Single-linkage):两个簇中最近样本的距离,容易形成链式聚类。
    • 全链接法(Complete-linkage):两个簇中最远样本的距离,能有效避免链式聚类,但对异常值敏感。
    • 平均链接法(Average-linkage):两个簇中所有样本对距离的平均值,平衡性较好。
    • 沃德法(Ward's method):合并两个簇时,簇内平方和(SSE)的增量最小,倾向于生成紧凑且大小均匀的簇,是最常用的方法之一。
  3. 迭代合并簇

    • 计算当前所有簇两两之间的距离。
    • 找出距离最小的一对簇,将它们合并为一个新簇。
    • 更新簇的集合,减少一个簇。
    • 重复上述过程,直到满足停止条件(如簇数 = 1,或达到目标簇数)。
  4. 生成树状图(Dendrogram)聚类过程可以用树状图可视化,横轴是样本,纵轴是簇间距离。通过截取树状图的某一高度,就能得到对应数量的簇。

二、层次聚类(凝聚型)算法

层次聚类(凝聚型)是通过自下而上合并聚类来构建嵌套式层次聚类结构的算法,具体步骤如下:

  1. 将每个数据点视为单个聚类;
  2. 采用距离度量方法计算邻近矩阵;
  3. 依据连接准则合并聚类;
  4. 更新距离矩阵;
  5. 重复步骤 3 和步骤 4,直至仅剩余一个聚类。

三、为何使用层次聚类(凝聚型)?

层次聚类(凝聚型)便于解读数据点间的关系。与 K - 均值聚类不同,该算法无需预先指定聚类数量,且效率高,能够识别小型聚类。

四、Python 中层次聚类(凝聚型)的实现

我们将以鸢尾花(iris)数据集为例进行演示,具体步骤如下:

(一)导入所需库并加载数据集

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram, linkage # 加载鸢尾花数据集 iris = load_iris() X = iris.data # 特征数据 y = iris.target # 目标标签

(二)构建连接矩阵

连接矩阵包含了每对聚类之间的距离,可通过scipy.cluster.hierarchy模块中的linkage函数构建:

# 使用"ward"方法计算聚类间距离,该方法可最小化被合并聚类间距离的方差 Z = linkage(X, 'ward')

(三)可视化树状图

通过同一模块中的dendrogram函数可视化树状图:

plt.figure(figsize=(7.5, 3.5)) plt.title("鸢尾花数据集树状图") dendrogram(Z) # 绘制树状图 plt.show()

生成的树状图(见下图)展示了聚类间的层次关系:算法首先合并最接近的聚类,且随着树状图向上延伸,聚类间的距离逐渐增大。

(四)应用聚类算法并提取聚类标签

通过sklearn.cluster模块中的AgglomerativeClustering类应用算法:

# 创建层次聚类(凝聚型)实例,指定聚类数量为3(已知鸢尾花数据集包含3个类别) model = AgglomerativeClustering(n_clusters=3) model.fit(X) # 拟合数据集 labels = model.labels_ # 提取聚类标签

(五)可视化聚类结果

通过散点图可视化最终聚类结果:

plt.figure(figsize=(7.5, 3.5)) # 以花萼长度为x轴、花萼宽度为y轴绘制散点图,不同聚类用不同颜色标识 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.xlabel("花萼长度") plt.ylabel("花萼宽度") plt.title("层次聚类(凝聚型)结果") plt.show()

生成的图表展示了算法识别出的 3 个聚类,可见算法成功将数据点划分为对应的类别。

五、完整代码示例

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram, linkage # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 构建连接矩阵并绘制树状图 Z = linkage(X, 'ward') plt.figure(figsize=(7.5, 3.5)) plt.title("鸢尾花数据集树状图") dendrogram(Z) plt.show() # 创建层次聚类(凝聚型)模型并拟合数据 model = AgglomerativeClustering(n_clusters=3) model.fit(X) labels = model.labels_ # 可视化聚类结果 plt.figure(figsize=(7.5, 3.5)) plt.scatter(X[:, 0], X[:, 1], c=labels) plt.xlabel("花萼长度") plt.ylabel("花萼宽度") plt.title("层次聚类(凝聚型)结果") plt.show()

六、层次聚类(凝聚型)的优势

  1. 生成树状图,清晰展示聚类间的层次关系;
  2. 可兼容多种距离度量方法和连接准则;
  3. 聚类数量灵活,可根据需求从数据中提取;
  4. 高效实现版本可处理大型数据集。

七、层次聚类(凝聚型)的劣势

  1. 处理大型数据集时计算成本较高;
  2. 若距离度量方法或连接准则与数据不匹配,可能产生不平衡聚类;
  3. 最终结果对距离度量方法和连接准则的选择较为敏感;
  4. 对于包含大量聚类的大型数据集,树状图的解读难度较大。

八、层次聚类(凝聚型)的应用场景

层次聚类(凝聚型)在无监督机器学习任务的多个领域均有应用,主要包括:

  1. 图像分割;
  2. 文档聚类;
  3. 客户行为分析(客户细分);
  4. 市场细分;
  5. 社交网络分析。
http://www.jsqmd.com/news/211365/

相关文章:

  • 34.方块定位
  • Cloudflare Workers 和 Pages 的本质区别:托管 vs 计算
  • Qoder NEXT 来了:补全功能全新升级,AI 代码采纳率提升 65%
  • 京东蚂蚁领跑链上金融:香港RWA革命如何打通万亿级资产新通道?
  • 黑客技术门槛有多高?普通人入局需谨慎!网安入行必看的 3 个事实
  • 双馈风力发电系统AC/DC/AC变流器的仿真模型 ,网侧变流器及转子侧变流器的控制方案,采用双...
  • 用 Cloudflare D1 给 Pages/Functions 上数据库:一套“绑定式部署”的正确姿势
  • 阿培利斯:一种具有潜力的癌症治疗药物
  • DApp开发全周期革命:模式创新、模块化架构与合规化生存指南
  • BC911:22V/3.5A 同步降压单节锂电池充电芯片
  • nginx接口超时,增加接口超时时间
  • 全网干货!2026 转行网络安全:行业前景预判 + 工作内容详解 + 薪资水平参考
  • ROS-Industrial 安装及使用
  • 低代码技术民主化:全民开发时代即将到来
  • UE5 C++(12):
  • 深度测评继续教育AI论文网站TOP10:选对工具轻松写好论文
  • 超棒Claude官方提示词:Anthropic发布Claude 4.x提示工程最佳实践
  • 土木行业遇冷?越来越多土木人正在疯狂转行网络安全!
  • 4D通用世界模型!中科院NeoVerse用百万单目视频直接构建
  • 学霸同款!8款AI论文工具测评:开题报告与文献综述必备
  • 智能合约“可塑”之争:代理模式与钻石标准,谁将主导链上未来?
  • Eclipse:大小写转换的快捷键
  • 通用、高效、且能处理复杂关联关系(多对多)的 “不同环境下实现数据“ 解决方案
  • ‌ROS-Industrial
  • 潮玩宇宙:链游与数藏融合的财富密码,开发成本与商业逻辑全揭秘
  • 程序员2026年金三银四面试突击之Java权威指南-面试场景题!
  • 新手必看:网络安全的定义 + 涵盖范畴,学完能成为黑客吗?
  • 低耗能蓝牙信标:关键技术演变和部署深度选型指南详解
  • 英伟达、英特尔和AMD芯片同台竞技:CES 2026各自都展示了怎样的实力
  • 【AI黑科技】大模型的“知之为知之“之道!自适应滑动窗口让RAG系统告别幻觉,性能开挂!