2010-05-25 9 views
9

Comment exécuter un clustering hiérarchique sur une matrice de corrélation dans scipy/numpy? J'ai une matrice de 100 lignes sur 9 colonnes, et j'aimerais regrouper hiérarchiquement les corrélations de chaque entrée entre les 9 conditions. Je voudrais utiliser la corrélation 1-pearson comme les distances pour le clustering. En supposant que j'ai un tableau "X" qui contient la matrice 100 x 9, comment puis-je faire cela?clustering hiérarchique sur les corrélations dans Python scipy/numpy?

J'ai essayé d'utiliser hcluster, basé sur cet exemple:

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

cependant pdist est pas ce que je veux puisque c'est la distance euclidienne. Des idées?

merci.

Répondre

6

il suffit de changer la métrique à correlation de telle sorte que la première ligne devient:

Y=pdist(X, 'correlation') 

Cependant, je crois que le code peut être simplifié juste:

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

parce que la liaison se chargera de le pdist pour toi.

+1

La «corrélation» signifie-t-elle ici Pearson ou Spearman? Aussi, ne devrait-il pas être 1 - pearson afin d'être une métrique de distance valide qui peut être utilisé pour pdist? Est-ce que pdist le fait automatiquement? Merci. – user248237dfsf

+2

On dirait que c'est 1 - pearson pour moi. Vous pouvez le regarder vous-même dans site-packages/scipy/spatial/distance.py –

+2

Il est assez rare que la "corrélation" mentionnée seule indique une corrélation de Spearman. Habituellement, si c'est Spearman, les gens le diront, sinon assumez Pearson. – dwf