层次聚类
凝聚式方法从单样本簇开始按 linkage 逐步合并,形成可切割的树状层级。
学习前需要掌握
背景与问题
有时分组有多个有意义的尺度:小群体可以合成较大的类别,单个 K 不能表达这种关系。层次聚类保留逐次合并结构,让读者按不同阈值切割,但早期错误合并通常不能在后续自动撤销。
概念定义
凝聚层次聚类从每个点各自成簇开始,反复合并簇间距离最小的一对。single、complete、average 根据跨簇点对的最小、最大或平均距离定义接近程度;Ward 根据合并导致的簇内平方和增量选择,不能当作普通任意距离 linkage。
直观理解
先把关系最近的小组凑起来,再把小组组成大组。关键是“两个小组有多近”如何定义:最近两人很近,还是所有人都相近,会产生不同组织结构。
核心原理
single linkage 容易沿点链连接远处团块,complete 更偏向较紧凑簇,average 在跨簇距离上取平均。不存在对所有任务都正确的 linkage,应根据希望表达的相似结构选择。
Ward 与欧氏几何和方差目标配套。特征缩放会改变所有点距离,树状图的合并高度也不等于真实语义差距;不同 linkage 的高度不能脱离定义直接比较。
可按簇数或距离阈值切树,但数据顺序、距离并列和约束可能影响细节。许多实现需要较高的距离或连通存储成本;大数据应检查具体算法复杂度,而不是默认层次方法总能高效扩展。
数学表达
三种跨簇距离
average 对所有跨簇点对距离求平均;Ward 另用平方和增量。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1选定特征、尺度、距离和 linkage,并说明约束。
- 2从单点簇或预定义小簇开始。
- 3按 linkage 选择最近簇对并合并,更新簇间距离。
- 4保存合并顺序与高度,构造层次结构。
代码对应位置
示例 1同一簇对的三种 linkage 距离:显式枚举跨簇点对,核对 linkage 的定义。
手算与场景核对
一维点 0、2、5、6,先合并距离为 1 的 [5,6],再可形成 [0,2]。对这两个簇,跨簇距离为 5、6、3、4。
single 取 3,complete 取 6,average 取 4.5。相同点集的合并高度因 linkage 而异,不能把这些数值当成同一单位下的统一质量指标。
计算与实现步骤
- 选定特征、尺度、距离和 linkage,并说明约束。
- 从单点簇或预定义小簇开始。
- 按 linkage 选择最近簇对并合并,更新簇间距离。
- 保存合并顺序与高度,构造层次结构。
- 依据验证和任务解释选切割尺度,检查异常点与链效应。
代码实现
示例 1
同一簇对的三种 linkage 距离
example_01.py用途:显式枚举跨簇点对,核对 linkage 的定义。
cluster_a, cluster_b = [0.0, 2.0], [5.0, 6.0]
distances = [abs(a-b) for a in cluster_a for b in cluster_b]
print(f"single={min(distances):.3f}")
print(f"complete={max(distances):.3f}")
print(f"average={sum(distances)/len(distances):.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
显式枚举跨簇点对,核对 linkage 的定义。
b- 偏置项。
Step 1 · 1–5 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
cluster_a, cluster_b = [0.0, 2.0], [5.0, 6.0]
distances = [abs(a-b) for a in cluster_a for b in cluster_b]
print(f"single={min(distances):.3f}")
print(f"complete={max(distances):.3f}")
print(f"average={sum(distances)/len(distances):.3f}")预期输出或运行结果
single=3.000 complete=6.000 average=4.500
常见错误 · 3 条
- 把 Ward 与任意预计算距离无条件混用。
- 把 single 的一条连接链误认成内部所有点都接近。
- 将任意切树高度解释为已验证的自然类别边界。
实际应用
- 探索数据在多个分辨率下的嵌套关系。
- 在样本量可控时可视化相似结构与聚类敏感性。
常见错误
- 把 Ward 与任意预计算距离无条件混用。
- 把 single 的一条连接链误认成内部所有点都接近。
- 将任意切树高度解释为已验证的自然类别边界。
资料与假设
参见 scikit-learn:Hierarchical clustering。 本页数值均为构造例;涉及模型分数时仅说明给定数据与协议下的计算。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。