【第二章:机器学习与神经网络概述】01.聚类算法理论与实践-(2)层次聚类算法(Hierarchical Clustering)

第二章: 机器学习与神经网络概述

第一部分:聚类算法理论与实践

第二节:层次聚类算法

内容:聚合方法、切分方法、相似度计算


层次聚类是一种无需预先指定类别数 的聚类方法,它通过**构建嵌套的聚类结构(层次树)**来揭示数据的多层次结构。可分为:

  • 聚合型(Agglomerative)

  • 切分型(Divisive)

【漫话机器学习系列】003.Agglomerative聚类_agglomerativeclustering-CSDN博客


一、基本概念

层次聚类的结果通常表示为一棵树状图(Dendrogram),每个叶节点表示一个样本,分支表示聚类过程。


二、两种聚类方式
1. 聚合型(自底向上)

每个样本初始为一个独立簇,迭代将最相似的两个簇合并,直到只剩一个簇或达到指定阈值。

2. 切分型(自顶向下)

从整体样本开始,每次将某个簇拆分为两个,直到满足终止条件。较少使用,计算复杂度高。


三、簇间相似度的计算方法(Linkage)

聚合型层次聚类的核心在于簇间距离(相似度)计算方式

方法 描述 特点
单链接法(Single Linkage) 两簇中距离最近的两个样本之间的距离 易形成链状结构("链现象")
完全链接法(Complete Linkage) 两簇中距离最远的两个样本之间的距离 结果紧凑,不易受离群点影响
平均链接法(Average Linkage) 两簇中所有样本两两之间距离的平均值 折中方案
重心法(Centroid Linkage) 使用簇中所有样本的质心间距离 可用于欧氏空间
Ward法 合并后平方误差最小化(最小化方差增加) 通常效果较好,但要求欧式距离空间

四、常用相似度度量方式
度量方式 公式说明 适用场景
欧氏距离 连续型数值数据
曼哈顿距离 ![d(x, y) = \sum_{i=1}^{n} x_i - y_i
余弦相似度 文本向量、用户行为
杰卡德相似度 交集 / 并集 二元/集合型数据
汉明距离 不同位数的个数 分类变量(编码)

五、层次聚类过程示意(以聚合为例)
  1. 初始化:每个样本为一个簇。

  2. 计算所有簇间的距离矩阵。

  3. 找到最近的两个簇进行合并。

  4. 更新距离矩阵。

  5. 重复步骤2~4,直到达到停止条件(如簇数、距离阈值等)。

  6. 通过树状图截取合适层级确定簇划分。


六、Python示例(使用 Scipy)
python 复制代码
from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
import numpy as np

# 示例数据
X = np.array([[1, 2], [2, 1], [5, 6], [6, 5]])

# 层次聚类
Z = linkage(X, method='ward')  # linkage 方法可以是 'single', 'complete', 'average', 'ward'

# 绘制树状图
plt.figure(figsize=(8, 4))
dendrogram(Z)
plt.title("Dendrogram - Hierarchical Clustering")
plt.xlabel("Sample index")
plt.ylabel("Distance")
plt.show()

七、优缺点总结
优点 缺点
不需要预设K值 对噪声与异常值敏感
提供多层次结构 一旦合并或切分,无法回溯
可用于非球状簇的识别 大规模数据计算成本高

总结
  • 层次聚类构建数据的嵌套结构图谱,常用于基因分析、市场细分等领域。

  • 聚合型算法在实践中更常见,可配合树状图裁剪层级确定最终分簇数。

  • linkage策略和距离度量方式影响最终聚类结果,应结合具体任务选择。