Python层次聚类按指定距离切割时如何获取各聚类及成员列表?
你可以使用 scipy.cluster.hierarchy 模块中的fcluster函数完成树图切割和聚类提取,具体实现步骤和代码如下:
步骤1:导入依赖
只需要额外导入fcluster函数即可,不需要其他额外依赖:
from scipy.cluster.hierarchy import fcluster
步骤2:按指定距离阈值切割聚类
在你已有代码生成 linkage 矩阵Z和样本标签列表labels后,添加如下代码:
# 按距离阈值2切割树图,返回每个样本对应的聚类编号 cluster_ids = fcluster(Z, t=2, criterion='distance') # 按聚类编号分组,整理每个聚类包含的样本名称 cluster_result = {} for sample_name, cid in zip(labels, cluster_ids): cluster_result.setdefault(cid, []).append(sample_name)
步骤3:查看结果
直接遍历输出结果即可:
for cid, members in cluster_result.items(): print(f"聚类{cid}样本:{members}")
针对你的数据集的输出示例
聚类1样本:['DN10172_i1'] 聚类2样本:['DN1357_i1', 'DN1357_i2', 'DN1357_i5']
代码说明
fcluster的参数t就是你设置的切割距离阈值- 参数
criterion='distance'表示按距离规则切割,保证同一个聚类内所有样本的共表距离不超过设置的阈值 - 返回的
cluster_ids顺序和你之前定义的labels顺序完全一一对应,直接配对即可得到每个样本所属聚类
内容的提问来源于stack exchange,提问作者MySky
相关产品推荐
相关产品推荐

