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是第一次合并生成的新簇编号:
- 返回矩阵的第0行对应第一次合并,合并的是初始簇1和3,生成的新簇包含2个样本,编号为10,对应样本集合
{1,3}。 - 第二次合并对应返回矩阵的第1行,合并的是初始簇7和第一次合并生成的簇10,所以行内容为
[7,10,...],本次生成的新簇编号为11。
内容的提问来源于stack exchange,提问作者K.J Fogang Fokoa
相关产品推荐
相关产品推荐

