层次聚类模拟器 返回
机器学习模拟器

层次聚类模拟器 — 凝聚型和树状图

对2D数据应用凝聚型层次聚类,实时绘制树状图。切换链接方法和距离阈值,直观学习聚类数是如何确定的。

参数设置
链接方法

0=单链接(最短距离法)/1=完全链接(最长距离法)/2=平均链接(群平均法/UPGMA)

距离阈值 t
数据点数(每个聚类)
数据种子

默认值(平均链接、t=3.0、10点×3、seed=42)可检测到真实的3个聚类。

暂停时,拖动滑块即可即时更新结果。

计算结果
已合并次数
当前聚类数
最近合并距离
链接方法
散点图和树状图

上=散点图(聚类色分,轴[−4,4]×[−4,4])/下=树状图(X=点ID,Y=距离,橙虚线=阈值t)

理论·主要公式

凝聚型层次聚类从每个点作为独立聚类开始,反复合并最接近的两个聚类。链接方法改变聚类间距离 $d(C_1,C_2)$ 的定义。

单链接(最短距离法):

$$d(C_1,C_2)=\min_{x\in C_1,\;y\in C_2}\|x-y\|$$

完全链接(最长距离法):

$$d(C_1,C_2)=\max_{x\in C_1,\;y\in C_2}\|x-y\|$$

平均链接(群平均法/UPGMA):

$$d(C_1,C_2)=\frac{1}{|C_1||C_2|}\sum_{x\in C_1}\sum_{y\in C_2}\|x-y\|$$

在距离阈值 $t$ 处水平切割树状图,该高度的聚类数就确定了。

层次聚类模拟器是什么

🙋
机器学习教科书里经常看到的那种倒过来的树形图(树状图)最后表示什么?
🎓
那表示「哪些点、在什么距离时成为伙伴」的合并历史。凝聚型层次聚类从全部点各自为一个30聚类开始,反复合并最接近的两个聚类。用本工具的默认值(平均链接、t=3.0)看,树状图下方能看到点点相连,上方看到分组之间相连,过程逐步清晰。
🙋
橙色虚线(t=3.0)是什么意思? 用它切割后就变成3个聚类了。
🎓
那就是「在距离阈值处切割」的操作。水平切割树状图,该高度剩余的聚类数就确定了。t=3.0时切成3组,t降到0.5时会细分为接近30个,t升到10时全部归为1组。原始数据本来就是3个高斯混合分布,t=3.0恰好检测到3个聚类不是巧合,而是机制上的必然。
🙋
链接方法改为「单链接(最短距离法)」时,好像被吸入一个大块里了…?
🎓
观察很敏锐。这就是单链接的「链式效应」。聚类间距离用「最接近的1对」来测量,所以中间只要有1个点搭个桥,不同组就会连在一起。完全链接相反,用最远的一对来测,容易形成紧凑的聚类。平均链接介于两者之间,叫UPGMA的方法在系统学里也是标准工具,很稳定。
🙋
实务中应该怎么和k-means配套用呢?
🎓
k-means需要事先决定聚类数k,但层次聚类可以后来选择在树的哪个高度切割。所以当「到底要分成几个」这个问题本身就不明确时,层次聚类更有利。缺点是计算量是O(n³),超过1万个点就太勉强了。少量、中量数据,想看数据本身的层次结构时,就用层次聚类。

常见问题

Ward法不是直接定义聚类间距离的方法,而是最小化合并成本(方差增加量),在性质上与其他三种方法不同。虽然可以用Lance–Williams更新式纳入同一框架,但初步理解阶段,对比单链接/完全链接/平均链接就足够了。实务中Ward确实应用广泛,但优先让学者掌握这三种方法的链接思想。
本工具用2D点群的欧几里得距离。通常任何距离矩阵都可以输入,曼哈顿距离、余弦距离、Jaccard距离也都可以。系统学用序列间的编辑距离,文本分类用余弦距离是标准。距离选择直接影响聚类形状,在实务中从领域知识选择合适距离非常重要。
轮廓对每个点比较「同聚类内的平均距离a」和「最近的异聚类的平均距离b」,计算(b−a)/max(a,b)。接近1时聚类明确分离,接近0时聚类边界模糊,负值说明点离别的聚类更近。本工具默认值0.5~0.7左右,说明3个高斯分布分离很清楚。
朴素实现时间O(n³)、空间O(n²),数千点就到实用极限。SLINK(单链接,O(n²))、CLINK和BIRCH等大规模层次聚类算法存在。本工具只示范n≤45的小规模,无任何优化。超过1万点时,k-means、MiniBatchKMeans或密度聚类DBSCAN是实际选择。

实际应用

生物信息学(系统进化树推断):从DNA序列或蛋白质序列的相似度推断生物进化系统发育树,经典算法UPGMA(=平均链接)就是层次聚类本身。从序列比对生成距离矩阵,画树状图,在分支点分类物种。NCBI、MEGA、PhyML等主流系统分析软件都以此为基础。

客户分割(市场营销):按购买历史或人口统计分类客户,通过树状图决定「分几层客户」。与k-means不同,不用事先决定k,可以向管理层提示「分3层还是5层」的选项。R的hclust、scikit-learn的AgglomerativeClustering是标准工具。

基因表达分析(热力图):从微芯片或RNA-Seq得到基因×样本矩阵,对行(基因)和列(样本)同时做层次聚类重排,绘制热力图。共表达基因组和相似发表达式样本一眼看出,是生命科学论文最常见的可视化手法之一。

异常检测·故障分析:对传感器数据或服务器日志做层次聚类,把小聚类或高处合并的「孤立点」作为异常候选。扫过阈值t「在什么粒度上出现异常」的方法是k-means不容易做到的层次聚类特有的强项。

常见误区和注意点

最大误区是把「链接方法当做个人喜好选择」。实际上结果会随数据特征剧烈变化。单链接易检测链状、细长的聚类,但1个噪点就能让本来不同的聚类通过「链式效应」连接。完全链接偏好紧凑的球形聚类,但对离群值特别敏感。本工具从默认值只改链接方法为单链接,树状图形状大变,t=3.0剩余的聚类数也波动。应该「对比选择」而非「凭感觉选择」。

第二常见是「距离阈值t当做正确答案来固定」。t本质是超参数,要通过树状图观察「大间隔地方」选,或通过轮廓最大化来选,或用领域知识决定。本工具的t滑块移动时,树状图上橙虚线上下晃动,聚类数阶梯式变化。找聚类数稳定的平坦区是窍门。

最后是「计算量O(n³)掉以轻心」。模拟器上30点瞬间算完,但1万点的话单纯计算放大37万倍,10万点就37亿倍。大规模聚类需要SLINK/CLINK等特殊高速算法、k-means或BIRCH这样的近似法,或GPU并行。「层次聚类=少量数据向」是实务心得。

使用指南

  1. 通过「链接方法」滑块选择单链接、完全链接或Ward法中的一种
  2. 在「距离阈值」0~10范围内调整,控制树状图中的聚类合并停止点
  3. 用「数据点数」滑块设置5~100个样本量,用「种子值」指定可重现的随机数生成
  4. 点击「运行」按钮,逐步执行凝聚型聚类,更新树状图和各阶段的聚类数

具体计算示例

从铝合金制造工艺采集50个样本(晶粒尺寸、硬度、导电率)时,用Ward法设置距离阈值d=3.5,从初始50个聚类最终合并为7个。此时最后合并距离d_max=3.8,平均轮廓系数=0.62,能清楚识别合金批次间的品质分组。单链接则在d=2.1时也得到7个聚类,但链式效应导致结果容易不稳定。

实务中的注意点