第二章: 机器学习与神经网络概述
第一部分:聚类算法理论与实践
第二节:层次聚类算法
内容:聚合方法、切分方法、相似度计算
层次聚类是一种无需预先指定类别数 的聚类方法,它通过**构建嵌套的聚类结构(层次树)**来揭示数据的多层次结构。可分为:
-
聚合型(Agglomerative)
-
切分型(Divisive)
【漫话机器学习系列】003.Agglomerative聚类_agglomerativeclustering-CSDN博客
一、基本概念
层次聚类的结果通常表示为一棵树状图(Dendrogram),每个叶节点表示一个样本,分支表示聚类过程。
二、两种聚类方式
1. 聚合型(自底向上)
每个样本初始为一个独立簇,迭代将最相似的两个簇合并,直到只剩一个簇或达到指定阈值。
2. 切分型(自顶向下)
从整体样本开始,每次将某个簇拆分为两个,直到满足终止条件。较少使用,计算复杂度高。
三、簇间相似度的计算方法(Linkage)
聚合型层次聚类的核心在于簇间距离(相似度)计算方式:
方法 | 描述 | 特点 |
---|---|---|
单链接法(Single Linkage) | 两簇中距离最近的两个样本之间的距离 | 易形成链状结构("链现象") |
完全链接法(Complete Linkage) | 两簇中距离最远的两个样本之间的距离 | 结果紧凑,不易受离群点影响 |
平均链接法(Average Linkage) | 两簇中所有样本两两之间距离的平均值 | 折中方案 |
重心法(Centroid Linkage) | 使用簇中所有样本的质心间距离 | 可用于欧氏空间 |
Ward法 | 合并后平方误差最小化(最小化方差增加) | 通常效果较好,但要求欧式距离空间 |
四、常用相似度度量方式
度量方式 | 公式说明 | 适用场景 |
---|---|---|
欧氏距离 | 连续型数值数据 | |
曼哈顿距离 | 
六、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
策略和距离度量方式
影响最终聚类结果,应结合具体任务选择。