如何从sklearn AgglomerativeClustering遍历树?

alv*_*vas 6 python machine-learning hierarchical-clustering scipy scikit-learn

我有一个numpy文本文件数组:https://github.com/alvations/anythingyouwant/blob/master/WN_food.matrix

它是术语和彼此之间的距离矩阵,我的术语列表如下:http://pastebin.com/2xGt7Xjh

我使用以下代码生成分层集群:

import numpy as np
from sklearn.cluster import AgglomerativeClustering

matrix = np.loadtxt('WN_food.matrix')
n_clusters = 518
model = AgglomerativeClustering(n_clusters=n_clusters,
                                linkage="average", affinity="cosine")
model.fit(matrix)
Run Code Online (Sandbox Code Playgroud)

为了获得每个学期的聚类,我本可以做到:

for term, clusterid in enumerate(model.labels_):
    print term, clusterid
Run Code Online (Sandbox Code Playgroud)

但是如何遍历AgglomerativeClustering输出的树?

是否有可能将其转换为scipy树状图(http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.dendrogram.html)?之后我如何遍历树状图?

A.P*_*.P. 15

我已经为sklearn.cluster.ward_tree回答了类似的问题: 你如何从sklearn.cluster.ward_tree可视化病房树?

AgglomerativeClustering以相同的方式在children_属性中输出树.这是对AgglomerativeClustering的病房树问题中代码的改编.它以树的每个节点的形式(node_id,left_child,right_child)输出树的结构.

import numpy as np
from sklearn.cluster import AgglomerativeClustering
import itertools

X = np.concatenate([np.random.randn(3, 10), np.random.randn(2, 10) + 100])
model = AgglomerativeClustering(linkage="average", affinity="cosine")
model.fit(X)

ii = itertools.count(X.shape[0])
[{'node_id': next(ii), 'left': x[0], 'right':x[1]} for x in model.children_]
Run Code Online (Sandbox Code Playgroud)

/sf/answers/1830648291/

  • 您还可以执行dict(enumerate(model.children_,model.n_leaves_)),这将为您提供字典,其中每个键是节点的ID,值是其子节点的ID对。 (2认同)