我在以下位置有一个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)
为了获得每个术语的聚类,我可以这样做:
for term, clusterid in enumerate(model.labels_):
print term, clusterid
但是我如何遍历AgglomerativeClustering输出的树?
是否可以将其转换为Scipy树状图(http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.dendrogram.html)?之后,我该如何遍历树状图?
最佳答案
我对sklearn.cluster.ward_tree回答了类似的问题:
How do you visualize a ward tree from 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_]
https://stackoverflow.com/a/26152118