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

scipy HAC层次聚类linkage输出子簇编号计算规则咨询

Scipy层次聚类linkage输出的簇编号规则说明

测试基础信息

你使用的数据集共包含10个样本,X_train内容如下:

X_train
>>array([[ 0.97699105,  0.22532681],
         [-0.73247801,  0.60953553],
         [-0.99434933,  0.03124842],
         [-0.82325963,  0.57988328],
         [ 0.50084964, -0.26616097],
         [ 1.94969804,  0.42602413],
         [ 1.0254459 , -0.54057545],
         [-0.57115945,  0.8495053 ],
         [ 1.39201222, -0.34835877],
         [ 0.02372729,  0.52339387]])

使用单连接的层次聚类结果如下:

linkage(X_train, method='single')
>>array([[ 1.        ,  3.        ,  0.09550162,  2.        ],
         [ 7.        , 10.        ,  0.2891525 ,  3.        ],
         [ 6.        ,  8.        ,  0.41390592,  2.        ],
         [ 2.        , 11.        ,  0.57469287,  4.        ],
         [ 4.        , 12.        ,  0.59203425,  3.        ],
         [ 9.        , 13.        ,  0.67840909,  5.        ],
         [ 0.        , 14.        ,  0.6843032 ,  4.        ],
         [15.        , 16.        ,  0.92251969,  9.        ],
         [ 5.        , 17.        ,  0.95429679, 10.        ]])

生成树状图的代码:

dendrogram(linkage(X_train, method='single'), labels=np.arange(X_train.shape[0]))

对应树状图:
树状图


簇编号规则说明

scipy.cluster.hierarchy.linkage的簇编号规则非常简单:

  • 初始所有单样本簇的编号,直接对应样本的索引,范围为0 ~ 样本总数-1。你的场景样本总数为10,所以初始簇编号为0~9。
  • 每完成一次合并生成的新簇,编号会按合并的先后顺序从样本总数开始依次递增:第1次合并(对应返回矩阵的第0行)生成的新簇编号为10,第2次合并(对应返回矩阵的第1行)生成的新簇编号为11,以此类推,第k次合并生成的新簇编号为10 + k -1。

示例解释

你提到的编号10是第一次合并生成的新簇编号:

  1. 返回矩阵的第0行对应第一次合并,合并的是初始簇1和3,生成的新簇包含2个样本,编号为10,对应样本集合{1,3}。
  2. 第二次合并对应返回矩阵的第1行,合并的是初始簇7和第一次合并生成的簇10,所以行内容为[7,10,...],本次生成的新簇编号为11。

内容的提问来源于stack exchange,提问作者K.J Fogang Fokoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:45:01