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

如何为生成树状图的距离矩阵添加标签并在树状图中展示

解决Scipy层次聚类中添加样本标签的问题

首先明确:scipy.cluster.hierarchy.average()(即UPGMA算法)这类linkage函数本身不接受labels参数,它仅负责计算聚类的连接关系,生成的outDND(linkage矩阵)里只存储聚类的结构信息,不会保存样本标签。标签需要在可视化树状图或后续分析阶段单独指定。

具体实现步骤

  1. 正常生成linkage矩阵
    先按原有方式执行聚类计算,无需给average()传labels:
from scipy.cluster.hierarchy import average, fcluster, dendrogram
import matplotlib.pyplot as plt

# 你的距离矩阵(压缩向量形式)
distanceMatrix = [188.61516889752, 226.68716730362135, 188.96015266132167]
outDND = average(distanceMatrix)
  1. 可视化时添加标签
    使用dendrogram()函数绘制树状图,通过labels参数传入自定义样本标签,叶子节点就会显示指定标签:
# 绘制带标签的树状图
dendrogram(outDND, labels=['A', 'B', 'C'])
plt.title("UPGMA 聚类树状图")
plt.show()
  1. 关联聚类结果与标签
    如果用fcluster()得到样本的簇分配结果,可以将簇标签和样本标签对应起来,方便后续分析:
# 获取簇分配(阈值可根据需求调整)
cluster_labels = fcluster(outDND, t=200, criterion='distance')
# 关联样本标签和簇标签
sample_cluster = dict(zip(['A', 'B', 'C'], cluster_labels))
print(sample_cluster)
# 输出示例:{'A': 1, 'B': 2, 'C': 1}

关键说明

  • 你的距离矩阵是压缩的距离向量(对应3个样本两两之间的距离,顺序为A-B、A-C、B-C),这是pdist()生成的格式,average()可直接处理。
  • 标签本质是样本的标识,和聚类计算过程无关,仅在结果展示或后续数据关联时用到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:20:23