4

나는에서 NumPy와 텍스트 파일 배열이 있습니다 https://github.com/alvations/anythingyouwant/blob/master/WN_food.matrixsklearn에서 나무를 가로 지르는 방법 AgglomerativeClustering?

그것은 용어와 서로 사이의 거리 행렬의를, 용어의 내 목록과 같은 수 있습니다 :

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 dendrogram (http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.dendrogram.html)으로 변환 할 수 있습니까? 그리고 그 후에 어떻게 멍크 라인을 횡단합니까?

+0

에서 [문서] (http://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html)의'children_' 속성을보고 제안 '모델'. – jme

+0

나는 children_을 사용하고 두 개의 노드 목록을 제공하고 있지만 이동하지 않고 리턴하는 하위 노드가 아니며 그 노드의 노드 번호가 노드 수를 초과한다는 것을 전혀 알지 못합니다 ... – alvas

+1

전체 계층 적 'n' 객체는'2n - 1' 노드를 가진 트리를 생성합니다. 문서에서 "n_samples보다 작은 값은 트리의 잎을 의미하며, 큰 값 i는 자식 child_ [i - n_samples]가있는 노드를 나타냅니다. 그것은 나무를 가로 지르는 데 충분한 정보 여야합니다. – jme

답변

13

나는 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

+0

에는 노드에있는 항목을 알 수있는 방법이 있습니까? – alvas

+0

클러스터 라벨'model.labels_'과 어떤 관련이 있습니까? – alvas

+0

노드 번호는 트리의 각 리프에 대한 데이터 벡터의 인덱스이기도합니다. 예를 들어 { 'left': 1, 'right': 2, 'node_id': 10} 노드 10은 잎 1과 2를 자식으로 갖습니다. X [1]은 리프 1에 대한 데이터 벡터입니다. –

관련 문제