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

层次聚类树状图与AgglomerativeClustering结果不一致问题求解

结果不一致的核心原因

两次聚类使用的连接规则(linkage)不统一是问题根源:

  • 生成树状图时,你调用scipy的linkage函数指定的参数为complete(全连接,以两类样本的最大距离作为类间距离)
  • 调用sklearn的AgglomerativeClustering时指定的参数为ward(沃德连接,以两类合并后的总方差增量作为合并依据)
    两种合并规则逻辑完全不同,得到的聚类结果自然存在差异。
自动化获取与树状图匹配的分类结果

两种方案可选,都不需要手动提取索引:

方案1:统一sklearn的聚类参数与scipy一致

将AgglomerativeClustering的linkage参数修改为和scipy侧相同的complete即可,输出结果就会和树状图分类完全匹配:

from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='complete')  
output = cluster.fit_predict(dataset)

方案2:直接从scipy的linkage矩阵切分聚类

可以直接用scipy自带的fcluster工具,基于你已经生成的linked矩阵切分聚类,结果100%和树状图对应:

from scipy.cluster.hierarchy import fcluster
# t指定聚类数量,criterion设为maxclust表示按指定类数切分
output = fcluster(linked, t=2, criterion='maxclust')
# 若需要和sklearn一致的0起始标签,执行以下转换即可
# output = output - 1
二者的匹配规则

只要同时满足以下三个条件,scipy层次聚类结果和sklearn的AgglomerativeClustering结果完全一致:

  • 距离度量统一:如两侧均使用欧氏距离(euclidean)
  • 连接规则统一:两侧linkage参数完全相同
  • 切分类数统一:指定的聚类数量完全一致

你之前生成的树状图如下:
hca dendrogram

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:09:03