2010-05-25 4 views
9

Wie kann ich hierarchische Clustering auf einer Korrelationsmatrix in scipy/numpy ausführen? Ich habe eine Matrix von 100 Zeilen mal 9 Spalten, und ich möchte hierarchisch gruppieren durch Korrelationen von jedem Eintrag über die 9 Bedingungen. Ich würde gerne 1-Pearson-Korrelation als die Abstände für das Clustering verwenden. Angenommen, ich habe ein numpiges Array "X", das die 100 x 9-Matrix enthält, wie kann ich das tun?hierarchisches Clustering auf Korrelationen in Python scipy/numpy?

Ich versuchte hcluster verwenden, basierend auf diesem Beispiel:

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

jedoch pdist nicht, was ich will, ist da, dass euklidischer Abstand ist. Irgendwelche Ideen?

danke.

Antwort

6

einfach die Metrik correlation ändern, so dass die erste Zeile wird:

Y=pdist(X, 'correlation') 

Ich glaube jedoch, dass der Code vereinfacht werden kann, um nur:

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

weil Verknüpfung Pflege nehmen von der pdist für dich.

+1

Bedeutet "Korrelation" hier Pearson oder Spearman? Sollte es nicht auch 1 - pearson sein, um eine gültige Entfernungsmetrik zu sein, die für pdist verwendet werden kann? Tut das pdist das automatisch? Vielen Dank. – user248237dfsf

+2

Es sieht aus wie 1 - Pearson für mich. Sie können es selbst in Site-Paketen anschauen/scipy/spatial/distance.py –

+2

Es ist ziemlich selten für "Korrelation" erwähnt allein, Spearman Korrelation zu bedeuten. Normalerweise, wenn es Spearman ist, werden die Leute das sagen, ansonsten Pearson. – dwf