2010-05-25 4 views
9

scipy/numpy에서 상관 행렬에 대해 계층 적 클러스터링을 실행하려면 어떻게해야합니까? 나는 100 행 × 9 열의 행렬을 가지고 있으며, 9 가지 조건에 걸친 각 항목의 상관 관계를 계층 적으로 클러스터링하고 싶습니다. 클러스터링을위한 거리로 1- 피어슨 상관 관계를 사용하고 싶습니다. 100 x 9 매트릭스가 포함 된 배열이 "X"라고 가정하면 어떻게해야합니까? 파이썬에서 상관 관계에 대한 계층 적 클러스터링 scipy/numpy?

나는이 예에 따라, hcluster를 사용하여 시도 :

Y=pdist(X, 'seuclidean') 
Z=linkage(Y, 'single') 
dendrogram(Z, color_threshold=0) 

그러나, pdist 내가 그 유클리드 거리이기 때문에 원하는 것을하지 않습니다. 어떤 아이디어?

감사합니다. 첫 번째 행이되도록

답변

6

그냥 correlation에 메트릭 변경 : 그러나

Y=pdist(X, 'correlation') 

내가 코드를 단순화 할 수 있다고 생각, 그냥 :

Z=linkage(X, 'single', 'correlation') 
dendrogram(Z, color_threshold=0) 

연결이 알아서하기 때문에 당신을위한 pdist.

+1

여기서 '상관 관계'란 Pearson 또는 Spearman을 의미합니까? 또한 pdist에 사용할 수있는 유효한 거리 메트릭이되기 위해 1 - pearson이되어서는 안됩니까? pdist가 자동으로 그렇게합니까? 감사. – user248237dfsf

+2

마치 1 피어슨 인 것 같습니다. 당신은 site-packages/scipy/spatial/distance.py –

+2

에서 직접 볼 수 있습니다. Spearman 상관 관계를 의미하는 "상관 관계"는 매우 드뭅니다. 보통 스피어 만이라면 사람들은 그렇게 말할 것입니다. 그렇지 않으면 피어슨을 가정하십시오. – dwf