2017-09-03 1 views
0

나는 sklearn.cluster.AgglomerativeClustering을 사용하고 있습니다. 데이터 포인트 당 하나의 클러스터에서 시작하여 반복적으로 두 개의 "가장 가까운"클러스터를 병합하여 이진 트리를 형성합니다. 클러스터 사이의 거리는 링크 매개 변수에 따라 다릅니다.sklearn.cluster.AgglomerativeClustering이 병합 된 클러스터 간의 거리를 알려주지 않는 이유는 무엇입니까?

각 단계에서 병합 된 클러스터 간의 거리를 아는 것이 유용합니다. 그런 다음 병합 된 다음 클러스터가 너무 멀리 떨어져있을 때 중단 할 수 있습니다. 아아, 그게 AgglomerativeClustering에서 사용할 수없는 것 같습니다.

내가 누락 된 항목이 있습니까? 거리를 복구 할 수있는 방법이 있습니까?

+1

'거리'가 의미하는 바를 구체적으로 표현할 수 있습니까? 즉, 단순히 해당 클러스터의 무게 중심과 다른 점의 거리를 의미합니까? – tttthomasssss

+0

나는 구체적이지 않기를 원합니다. 단일 링크 또는 결과 클러스터 직경 또는 분산 증가에서와 같이, 제안 된 중심점 사이의 거리 또는 개별 클러스터의 두 지점 간 최소 거리가 될 수 있습니다. 핵심은 모든 집적 적 클러스터링 방법이 각 반복에서 두 개의 "가장 가까운"클러스터를 병합한다는 것입니다. 그 "친밀도"척도는 다른 방법으로 계산 될 수 있지만 각 병합시 명확하고 증가하는 가치가 있습니다. 이러한 가치를 아는 것이 유용 할 것입니다. – Eduardo

답변

1

sklearn.cluster.AgglomerativeClustering보다 다소 많은 옵션을 제공하는 scipy.cluster.hierarchy을 살펴볼 수 있습니다.

클러스터링은 병합 된 클러스터 사이의 거리를 포함하는 행렬을 반환하는 linkage 함수로 수행됩니다. 이것들은 Dendrogram이 가시화 될 수

from scipy.cluster.hierarchy import linkage, fcluster, dendrogram 
from sklearn.datasets import make_blobs 
import matplotlib.pyplot as plt 

X, cl = make_blobs(n_samples=20, n_features=2, centers=3, cluster_std=0.5, random_state=0) 
Z = linkage(X, method='ward') 

plt.figure() 
dendrogram(Z) 
plt.show() 

dendrogram.png

하나는 다양한 기준, 예를 들어에 기초하여 상기 결합 매트릭스 플랫 클러스터를 형성 할 수있다 관찰의 거리 :

clusters = fcluster(Z, 5, criterion='distance') 

Scipy의 계층 적 클러스터링이 훨씬 더 상세하게 here 설명합니다.

관련 문제