You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Dendrogram树状图计算指定y值聚类数及最优聚类数?

问题1:统计特定y值处的聚类数量

你可以直接使用scipy.cluster.hierarchy模块下的fcluster函数实现,该函数可根据指定的距离阈值切割层次聚类树,返回每个样本所属的聚类标签,统计去重后的标签数量即为对应阈值下的聚类数。
适配你现有代码的示例如下:

from scipy.cluster.hierarchy import fcluster
import numpy as np

# 计算y=2处的聚类数
cluster_labels_y2 = fcluster(Z, t=2, criterion='distance')
n_clusters_y2 = len(np.unique(cluster_labels_y2))
print(f"y=2处的聚类数量为:{n_clusters_y2}")

# 计算y=1.5处的聚类数
cluster_labels_y15 = fcluster(Z, t=1.5, criterion='distance')
n_clusters_y15 = len(np.unique(cluster_labels_y15))
print(f"y=1.5处的聚类数量为:{n_clusters_y15}")

问题2:y轴数值与最优聚类数的关联及判定方法

y轴的数值代表两个聚类合并时的类间距离,和聚类数为负相关关系:设置的距离阈值越小,切割得到的聚类数量越多,反之则越少,二者直接对应。
层次聚类也有成熟的最优聚类数判定方法,和K-Means的常用方法逻辑一致:

  • 肘方法:将不同距离阈值对应的聚类数作为横轴,对应聚类合并的距离增量作为纵轴绘图,找斜率突变的拐点,拐点对应的聚类数即为候选最优值,核心逻辑和K-Means肘方法一致,都是寻找类内差异最小、类间差异最大的平衡点。
  • 轮廓系数法:和K-Means的用法完全相同,遍历不同聚类数k(也可以直接遍历对应距离阈值),计算每个k下所有样本的平均轮廓系数,系数最接近1对应的k就是最优聚类数。
  • 除此之外,Calinski-Harabasz指数、Davies-Bouldin指数也可用于判定层次聚类的最优聚类数,两个指标的计算逻辑和在K-Means场景下的使用逻辑完全一致。

内容的提问来源于stack exchange,提问作者harry04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 03:45:03