gpt4 book ai didi

python - 如何获取树状图中节点下的所有叶子的列表?

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:37 25 4
gpt4 key购买 nike

我使用 scipy.cluster.hierarchy.dendrogram 制作了一个树状图,使用以下生成的数据:

a = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[100,])
b = np.random.multivariate_normal([0, 20], [[3, 1], [1, 4]], 大小=[50,])
c = np.random.multivariate_normal([8, 2], [[3, 1], [1, 4]], 大小=[80,])
X = np.concatenate((a, b, c),)

创建联动函数:

从 scipy.cluster.hierarchy 导入树状图,链接
Z = 联动(X, '病房')

然后:

树状图(
Z,
truncate_mode='lastp', # 仅显示最后 p 合并的簇
p=5, # 仅显示最后 p 合并的簇
show_leaf_counts=False, # 否则括号中的数字为计数
叶子旋转=90.,
leaf_font_size=12.,
show_contracted=True, # 在截断的分支中获得分布印象
)

现在,我的数据中有总共 230 个观测值,这些观测值被分成 p=5 个簇。我想要为每个集群提供其中所有观测值的所有行索引的列表。另外,我想知道这 5 个集群之上的层次结构。

谢谢!

最佳答案

我是聚类和树状图的新手。如有错误欢迎指出。

# put X in a dataframe
df = pd.DataFrame()
df['col1']=X[:,0]
df['col2']=X[:,1]

index=[]
for i in range(len(X)):
elem = 'A' + str(i)
index.append(elem)

df['index'] = index
print(df.shape)
df.head()

enter image description here

Z = linkage(X, 'ward')

dendrogram(
Z,
truncate_mode='lastp', # show only the last p merged clusters
p=5, # show only the last p merged clusters
show_leaf_counts=True, # otherwise numbers in brackets are counts
leaf_rotation=90.,
leaf_font_size=12.,
show_contracted=True, # to get a distribution impression in truncated branches
);
plt.show()

enter image description here

# retrieve elements in each cluster
label = fcluster(Z, 5, criterion='maxclust')

df_clst = pd.DataFrame()
df_clst['index'] = df['index']
df_clst['label'] = label

# print them
for i in range(5):
elements = df_clst[df_clst['label']==i+1]['index'].tolist()
size = len(elements)
print('\n Cluster {}: N = {} {}'.format(i+1, size, elements))

enter image description here

关于python - 如何获取树状图中节点下的所有叶子的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com