一句话定义:层次聚类(Hierarchical Clustering)是一类不需要你先说"分几类"的聚类方法,它通过反复合并或拆分样本,把整个聚类过程记录成一棵树(树状图,dendrogram),分几类由你事后决定。
它怎么工作
主流路线是自底向上,叫凝聚式(agglomerative):一开始把每个样本都当成独立的一簇,然后找出当前最"像"的两簇合并成一簇,重复这一步,直到所有样本并成一大簇。另一条路线是自顶向下(divisive),从整体开始一层层往下拆,用得少一些,因为每一步"该怎么拆"计算代价更高。
关键在于"两簇有多像"怎么定义,这叫链接方式(linkage):单链接(single)看两簇中最近的两个点,全链接(complete)看最远的两个点,平均链接(average)看所有点对的平均距离,Ward 法则要求每次合并让簇内方差增加得最少。链接方式不同,长出来的树形状会差很多。
打个比方:整理一屋子散落的照片。你先挑出最像的两张放在一起,再把相似的小堆并成大堆,直到所有照片归成一摞。全程你并没有决定最后分几摞,只是把归并顺序记成一张"合并族谱"。真要用的时候,想要三类,就在族谱上从下往上数到三个大分支的地方横切一刀;想要五类,就往下再切低一点。这就是"剪树"。
和邻居们的区别
| 层次聚类 | K 均值(K-means) | DBSCAN | |
|---|---|---|---|
| 是否要预设簇数 | 不要,事后剪树 | 必须给定 K | 不要,靠密度参数 |
| 输出 | 一棵树,可取出任意粒度的划分 | 一次划分 | 划分 + 噪声点 |
| 计算开销 | 较高,样本多时吃力 | 低,能撑大数据 | 中等 |
| 能否回溯 | 能,合并历史全在树上 | 不能 | 不能 |
最本质的差别是"多粒度"和"确定性"。K 均值结果受初始质心影响,通常要跑多次取稳定解;层次聚类只要距离度量和链接方式定下来,结果就是确定的,而且一次运行就给出从粗到细的所有划分方案。
它的代价是贪心且不可逆:一旦合并就不再拆开,早期的错误没法回头修正。计算上时间开销大致随样本数平方增长,上万条以上要慎用,通常先抽样或先降维。
对谁有用
做数据的人:当你不知道业务上该分几类、又想让对方看见"这些客户是怎么一层层归拢起来的",层次聚类特别合适。客户分群、商品与文档的类目体系梳理、基因表达分析都是常见场景;配合热图(heatmap)展示树状图,沟通成本很低。
不写代码的人:它其实对应一种很朴素的思维方式——先把最像的东西并到一起,再并更大的堆,最后得到一套层级结构。电商类目树、公司组织架构、图书馆分类法,本质上都是这棵树。如果 K 均值是"你报个数,我切成几块",层次聚类就是"我先把家谱画好,你想认哪一辈的亲戚,自己下剪刀"。
具体实现与参数选项以各工具库的官方文档为准。
