金华市网站建设_网站建设公司_SSL证书_seo优化
2026/1/7 17:22:11 网站建设 项目流程

摘要:层次聚类(凝聚型)是一种自底向上的无监督聚类算法,通过逐步合并最近邻簇构建层次结构。该算法首先将每个样本视为独立簇,然后基于距离度量(如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. 社交网络分析。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询