2014-06-11 2 views
0

scikit의 계층 적 클러스터링 알고리즘 (scikit.cluster.Ward)을 실행하고 알고리즘의 첫 번째 반복 (각 관찰은 자체 클러스터)에서 마지막 반복까지 관찰이 클러스터 된 방식에 대한 전체 내역을 얻고 싶습니다. (하나의 클러스터에서 모든 관측). 겁 먹을 수 있니? 내가하고있는 정보는 각 반복마다 클러스터/관찰이 결합되고, 클러스터/관찰이 추가되며, 둘 사이의 거리입니다.Scikit Ward에서 클러스터 기록을 얻는 방법은 무엇입니까?

답변

3

모두가 ward.children입니다. 각 라인은 어떤 2 ​​개의 피쳐가 함께 클러스터되었는지 알려주므로 새로운 피쳐가 생성됩니다. 따라서 결국 클러스터가 성장할 때 색인을 생성하는 인덱스는 2 * n_features - 1입니다.

import numpy as np 
from scipy.ndimage import gaussian_filter1d 
n_samples, n_feat1, n_feat2 = 400, 20, 20 
X = np.random.randn(n_samples, n_feat1, n_feat2) 
X = gaussian_filter1d(X, sigma=2, axis=1) 
X = gaussian_filter1d(X, sigma=2, axis=2) 

from sklearn.feature_extraction.image import grid_to_graph 
connectivity = grid_to_graph(n_feat1, n_feat2) 

from sklearn.cluster import WardAgglomeration 
ward = WardAgglomeration(connectivity=connectivity) 

ward.fit(X.reshape(n_samples, -1)) 

print ward.children 

array([[ 35, 15], 
     [ 36, 16], 
     [ 34, 14], 
     [181, 180], 
     [201, 200], 
     [161, 160], 
     [241, 240], 
     [339, 338], 
     [221, 220], 
     [24, 4], 
     ...]) 

0 개에서 399 개의 색인이있는 400 개의 기능이 있습니다. 첫 번째 병합은 피쳐 35와 15 사이에 있으며 피쳐 400이 생성됩니다. 두 번째 병합은 피쳐 (feature) 36과 16 사이에 있으며 피쳐 401이 생성됩니다. 세 번째 병합은 34와 14 사이에 있으며 402를 생성합니다.

0.17에서 더 이상 사용되지 않으며 AgglomerativeClustering으로 바뀝니다.

+0

잘못 읽었습니까? 아니면 데이터 세트의 열을 그룹화하는이 방법입니까? 다양한 감속 방식으로 행동합니까? 나는 행 (관측)이 일련의 피쳐들을 기반으로 함께 클러스터링되는 방법을 실제로 배우는 것입니다. 내 데이터를 조 변경 한 다음 알고리즘을 실행하면 ... 생각을 할 수 있을까요? – ADJ

+0

그런 경우에는 'sklearn.cluster.Ward'를 사용하십시오. 열에 대해서도 동일한 작업을 수행합니다. 죄송합니다. 내 작업은 너무 많은 기능을 가진 공간 데이터를 사용하여 기능을 줄이는 데 유용합니다. – eickenberg

+0

죄송합니다. sklearn.cluster.Ward는 원하는 작업을 정확하게 수행합니다. 이는 행에 작용합니다. – eickenberg

관련 문제