Comment obtenir un clustering plat correspondant aux groupes de couleurs dans le dendrogramme créé par scipy
En utilisant le code posté icij'ai créé une belle clustering hiérarchique:
Disons que le dendrogramme sur la gauche a été créé en faisant quelque chose comme
Y = sch.linkage(D, method='average') # D is a distance matrix
cutoff = 0.5*max(Y[:,2])
Z = sch.dendrogram(Y, orientation='right', color_threshold=cutoff)
Maintenant comment puis-je obtenir les indices des membres de chacun de la couleur et de clusters? Pour simplifier cette situation, ignorer le regroupement sur le haut, et de se concentrer uniquement sur le dendrogramme sur la gauche de la matrice.
Ces informations doivent être stockées dans le dendrogramme Z
stockées variable. Il y a une fonction qui devrait faire exactement ce que je veux appelé fcluster
(voir la documentation ici). Cependant je ne vois pas où je peux donner fcluster la même cutoff
comme je l'ai spécifié dans la création du dendrogramme. Il semble que le seuil variable en fcluster
t
doit être en termes de diverses fausser les mesures (inconsistent
distance
maxclust
monocrit
). Des idées?
source d'informationauteur conradlee
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes sur la bonne voie. Essayons ceci:
ind
vous donnera cluster indices pour chacune des 100 de saisie des observations.ind
dépend de ce quemethod
vous avez utilisé danslinkage
. Essayezmethod=single
complete
etaverage
. Puis notez la façon dontind
diffère.Exemple:
scipy.cluster.hierarchy
est sûr, c'est déroutant. Dans votre lien, je ne reconnais pas mon propre code!J'ai écrit du code pour decondense le lien de la matrice. Il retourne un dictionnaire contenant l'index de
labels
qui sont regroupés par chaque agglomération étape. J'ai seulement essayé sur les résultats de l'complete
de liaison des clusters. Les clés de la dict commencer àlen(labels)+1
parce que d'abord, chaque étiquette est traité comme son propre cluster. Cela peut répondre à votre question.Retourne:
Je sais que c'est très tard pour le jeu, mais j'ai fait un tracé objet basé sur le code de la post ici. Il est enregistré sur le pep, donc, pour vous installer, il suffit d'appeler les
découvrez le projet github page ici : https://github.com/themantalope/pydendroheatmap
Vous pouvez également essayer
cut_tree
il a une hauteur de paramètre que vous donner ce que vous voulez pour ultrametrics.