2010-05-25 32 views
9

Come posso eseguire il clustering gerarchico su una matrice di correlazione in scipy/numpy? Ho una matrice di 100 righe per 9 colonne e mi piacerebbe raggruppare gerarchicamente le correlazioni di ciascuna voce tra le 9 condizioni. Mi piacerebbe utilizzare la correlazione di 1 pearson come le distanze per il clustering. Supponendo che ho una matrice numpy "X" che contiene la matrice 100 x 9, come posso fare questo?clustering gerarchico sulle correlazioni in Python scipy/numpy?

Ho provato ad utilizzare hcluster, sulla base di questo esempio:

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

tuttavia, pdist non è quello che voglio dato che è la distanza euclidea. Qualche idea?

grazie.

risposta

6

Basta modificare la metrica per correlation modo che la prima linea diventa:

Y=pdist(X, 'correlation') 

Tuttavia, credo che il codice può essere semplificata a poco:

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

perché linkage si prenderà cura di il pdist per te.

+1

La "correlazione" indica Pearson o Spearman? Inoltre, non dovrebbe essere 1 - pearson per essere una metrica di distanza valida che può essere usata per pdist? Il pdist lo fa automaticamente? Grazie. – user248237dfsf

+2

Sembra che sia 1 - Pearson per me. Puoi guardarlo da solo nei pacchetti del sito/scipy/spazial/distance.py –

+2

È abbastanza raro che la "correlazione" menzionata da sola significhi correlazione di Spearman. Di solito, se è Spearman, la gente lo dirà, altrimenti assume Pearson. – dwf