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

层次聚类模拟器 — 凝聚式与树状图

对二维数据应用凝聚式层次聚类,实时绘制树状图。切换 single/complete/average 连接法与距离阈值,直观理解簇数的决定方式。

参数设置
连接法

0=single(最短距离法)/1=complete(最长距离法)/2=average(群平均法/UPGMA)

距离阈值 t
数据点数(每簇)
数据种子

默认值(average、t=3.0、每簇10点×3、seed=42)可正确检测出3个真实簇。

计算结果
阈值t处的簇数
最终合并距离 d_max
平均轮廓系数
连接法
散点图与树状图

上=散点图(按簇着色,坐标轴 [−4,4]×[−4,4])/ 下=树状图(X=点ID、Y=距离、橙色虚线=阈值t)

理论与主要公式

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

single(最短距离法):

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

complete(最长距离法):

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

average(群平均法/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$ 水平切割树状图,可确定该高度上保留的簇数。

层次聚类模拟器是什么

🙋
机器学习教科书上经常看到的倒立树状图(dendrogram),究竟在表达什么呢?
🎓
它本质上是「哪两个点在多少距离上合并成为同伴」的合并历史。凝聚式层次聚类首先把所有点(这里是30个)各自作为独立簇,然后反复合并最近的两簇。看上面工具的默认值(average、t=3.0),可以看到树状图下方点彼此合并、上方各组再相互合并。
🙋
那条橙色虚线t=3.0是什么?在那里切开就分成3个簇了。
🎓
对,那就是「按距离阈值切割」。水平切割树状图,该高度上剩余的簇数就此确定。把t降到0.5会细分成接近30个微簇,提高到10则全部并成1个。这里的原始数据由3个高斯分布混合生成,所以默认t=3.0恰好能恢复出3个簇——这是设计好的,不是巧合。
🙋
把连接法改成single(最短距离法),数据好像都被一个大块吸进去了…?
🎓
观察得好。这就是single linkage著名的「链式效应」。它把簇间距离定义为最近的一对点,所以中间只要有一个点搭桥,本应分开的群组就会连成一片。complete则按最远点对衡量,倾向于生成紧凑的簇。average介于两者之间,以UPGMA之名在系统发育学中是经典且稳定的方法。
🙋
实际项目中怎么和k-means取舍呢?
🎓
k-means必须先决定k,而层次聚类可以事后从树上选择切割高度。所以当「到底该分成几类」本身就是问题时,它特别有用。缺点是O(n³)的复杂度,超过几万点就吃力。少量到中等规模的数据、想看清层次结构的时候,是层次聚类的主场。

常见问题

Ward法并不直接定义簇间距离,而是最小化合并代价(方差增量),与其他三种方法的思路不同。它可以用Lance–Williams递推公式纳入同一框架,但要初步理解「连接法」这一概念,比较single/complete/average三种已足够。Ward在实务中确实常用,本工具只是把第一课聚焦在三种基本方法上。
本工具对二维点采用欧几里得距离,但通常可以传入任意距离矩阵:曼哈顿距离、余弦距离、Jaccard距离等都可以。系统发育学使用序列编辑距离,文本分类常用余弦距离。距离的选择会显著改变簇的形状,因此根据领域知识选择合适的距离在实务中与连接法的选择同样重要。
对每个点计算a=同簇内其他点的平均距离、b=到最近的其他簇的平均距离,然后取(b−a)/max(a,b)。越接近1表示簇间分离越明显,0附近说明簇边界模糊,负值表示该点离别的簇更近。本工具默认值下大约在0.5~0.7,说明3个高斯分布的分离度很清晰。
朴素实现的时间复杂度为O(n³)、空间O(n²),数千点是实用上限。SLINK(single linkage、O(n²))和CLINK(complete linkage)等加速算法、以及面向大规模的BIRCH等层次方法可以缓解。本工具仅是N≤45的小规模教学演示,未做任何优化。当数据超过1万点时,k-means或MiniBatchKMeans,密度聚类则可选DBSCAN。

实际应用

生物信息学(系统树推断):从DNA或蛋白质序列的相似度推断生物进化系统树的经典算法UPGMA(=average linkage)正是层次聚类本身。从序列比对构建距离矩阵后绘制树状图,在分支点处划分物种。NCBI、MEGA、PhyML等主流系统发育分析软件都将其作为基础功能实现。

客户细分(市场营销):从购买历史和人口统计信息出发对客户进行层次聚类,再通过树状图自下而上地决定「应该分成几个客户层」。与k-means相比,事先无需确定k是其优点,可以向管理层提出「分成3层还是5层」的依据。R的hclust、scikit-learn的AgglomerativeClustering是标准工具。

基因表达分析(热图):对微阵列或RNA-Seq得到的基因×样本矩阵在行(基因)和列(样本)两个方向上分别进行层次聚类并重新排序,以热图形式可视化。共表达的基因群和具有相似表达模式的样本群一目了然,是生命科学论文中最常见的可视化手法之一。

异常检测与故障分析:对制造业的传感器数据或服务器日志进行层次聚类,将小簇或在很高位置才合并的「孤立点」识别为异常候选。通过扫描阈值t观察「在何种粒度下出现异常」的方法,是k-means等扁平方法难以实现的层次聚类独有的工作流。

常见误解与注意事项

最常见的误解是「连接法可以随喜好选择」。事实上,结果会随数据性质急剧变化。single linkage容易检测出链状簇,但会因一个噪声点而把本应分开的簇连接起来,发生「链式效应」。complete则倾向于紧凑的球形簇,但对离群点高度敏感。在本工具中,仅把默认设置的连接法切换为single,就能看到树状图形状大幅改变,t=3.0处保留的簇数也随之变动。正确的做法是「比较后选择」适合数据的方法。

第二个常见陷阱是把距离阈值t当作「标准答案」生硬地决定。t本质上是一个超参数,实务中通过观察树状图中「大幅打开的间隔」、最大化轮廓系数,或者基于领域知识来确定。在本工具中拖动t滑块,树状图上的橙色虚线会上下移动,对应的簇数呈阶梯状变化。选择簇数稳定的平坦区间是诀窍。

最后,不要低估O(n³)的计算量。模拟器中只有30点,计算瞬间完成;但增长到1万点时按朴素估算工作量会增加约37万倍,10万点则膨胀约3.7亿倍。正式大规模聚类需要考虑SLINK/CLINK等专门的快速算法、k-means或BIRCH等近似方法,或GPU并行化。记住「层次聚类适合小到中等规模数据」这一经验法则在实务中非常实用。