什么是层次聚类?

层次聚类(Hierarchical Clustering) 是一种构建聚类层次结构的算法。

核心直觉:

  • 开始时每个点是一个聚类
  • 逐步合并最相似的聚类
  • 最终形成一棵"树"(树状图 Dendrogram)

与 K-Means 对比:

  • K-Means:需要预先指定聚类数 K
  • 层次聚类:不需要指定 K,可以事后从树状图选择

适用场景

  • 生物分类:物种分类、基因序列分析
  • 文档层次结构:新闻主题层级、知识图谱构建
  • 社交网络社区发现:用户群体层次分析

历史渊源

问题背景:生物学家在研究物种分类时,需要一种方法来展示物种之间的亲缘关系——不只是"分成几组",而是展示"谁和谁更近"的层次结构。K-means 只能给出扁平的分组,无法表达这种层级关系。

关键突破:1967年,Stephen Johnson 系统性地描述了凝聚型层次聚类:从每个点自成一簇开始,每次合并最相似的两个簇,直到所有点合为一簇。整个过程形成一棵"树状图"(Dendrogram),在任意高度"切一刀"就能得到不同粒度的聚类结果。

深远影响:层次聚类的树状图成为了生物信息学的标准工具——基因表达分析、蛋白质家族分类、进化树构建都离不开它。"先看整体层次,再选择合适粒度"的分析思路影响了后来的多尺度数据分析方法。

趣闻:"Dendrogram"(树状图)这个词来自希腊语 dendron(树)+ gramma(图画)。生物学家最早用它画进化树,后来被统计学家"借"来做聚类可视化——这大概是生物学对数据科学最优雅的贡献之一。

发展脉络

1960s
层次聚类
自底向上
多种分裂策略
->
1980s
DIANA
自顶向下
大规模数据慢
->
1996
BIRCH/CURE
大规模优化

局限性

  • O(n2) 复杂度:需要计算和存储所有点对之间的距离
  • 无法撤销合并/分裂:一旦做出决策就无法回退
  • 对噪声敏感:异常点会影响整个层次结构

这些局限催生了:BIRCH(大规模数据)、CURE(对异常值鲁棒)、谱聚类(结合图论)

工业界地位

特定场景

层次聚类在小规模数据和需要层次结构的场景中被广泛使用:

  • 搜索引擎:搜索结果分类展示
  • 推荐系统:商品类目层次构建
  • 生物信息学:基因表达分析、蛋白质分类
  • 组织管理:部门架构、产品分类

何时选择层次聚类?当数据量较小(小于10万)、需要可视化层次结构、不确定聚类数时,层次聚类是最佳选择。树状图可以帮助直观地选择合适的聚类数!

交互式可视化

观察聚类如何逐步合并形成层次结构

3
5
试一试:
  • 观察树状图(dendrogram):横线的高度表示合并时两个簇的距离——越高表示越不相似
  • 调整「聚类数量」,相当于在树状图上画一条水平线——线以上的合并被「剪掉」
  • 切换不同的「链接方式」(单链接/完全链接/平均链接),观察聚类结果如何变化

数据点

树状图 (Dendrogram)

聚类信息:

当前层级: 0

合并距离: 0

聚类数: 0

数学原理

直觉引入:想象一群人站在操场上——先让最近的两个人手拉手组成一组,然后让最近的两组合并……不断重复,最终所有人连成一棵"家谱树"(树状图)。在任意高度"切一刀",就得到不同粒度的分组。

聚类间距离(链接方式):

两个簇 $C_i$ 和 $C_j$ 之间的距离有多种定义,选择不同会得到不同形状的簇:

  • 单链接(Single)——最近点距离,容易产生链式效应:
    $$d(C_i, C_j) = \min_{p \in C_i, q \in C_j} d(p, q)$$
  • 全链接(Complete)——最远点距离,倾向产生紧凑球形簇:
    $$d(C_i, C_j) = \max_{p \in C_i, q \in C_j} d(p, q)$$
  • 平均链接(Average)——所有点对的平均距离,折中方案:
    $$d(C_i, C_j) = \frac{1}{|C_i||C_j|} \sum_{p \in C_i} \sum_{q \in C_j} d(p, q)$$
  • Ward 方法——合并后方差增量最小,最常用:
    $$d(C_i, C_j) = \frac{|C_i||C_j|}{|C_i|+|C_j|} ||\mu_i - \mu_j||^2$$
如何选择聚类数?
观察树状图(Dendrogram),找最长的"竖线"(即两次合并之间距离跳跃最大的地方),在那里水平切割。跳跃越大,说明被合并的两个簇差异越大,不应该合并。