Liste de Clustering pour la fonction hclust

En utilisant la méthode plot(hclust(dist(x))), j'ai pu dessiner une carte d'arbre de cluster. Elle fonctionne. Pourtant, je voudrais obtenir une liste de tous les clusters, pas un diagramme d'arbre, parce que j'ai une énorme quantité de données (comme les nœuds 150K) et l'intrigue devient désordonnée.

En d'autres termes, disons que si a b c est un groupe et si d e f g est un groupe alors je voudrais obtenir quelque chose comme ceci:

1 a,b,c
2 d,e,f,g

Veuillez noter que ce n'est pas exactement ce que je veux obtenir comme une "sortie". C'est juste un exemple. J'aimerais juste être en mesure pour obtenir une liste de clusters au lieu d'une arborescence, il peut s'agir de vecteurs, de matrices ou de simples nombres qui montrent à quels groupes appartiennent les éléments.

Comment est-ce possible?

27
r
demandé sur Orbling 2011-06-29 13:05:25

2 réponses

J'utiliserai l'ensemble de données disponible dans R pour démontrer comment couper un arbre en nombre de pièces souhaité. Le résultat est un tableau.

Construire un objet hclust.

hc <- hclust(dist(USArrests), "ave")
#plot(hc)

, Vous pouvez maintenant couper l'arbre en autant de branches que vous le souhaitez. Pour mon prochain tour, je vais diviser l'arbre en deux groupes. Vous définissez le nombre de coupes avec le paramètre k. Voir ?cutree et l'utilisation de paramter h qui peut vous être plus utile (Voir cutree(hc, k = 2) == cutree(hc, h = 110)).

cutree(hc, k = 2)
       Alabama         Alaska        Arizona       Arkansas     California 
             1              1              1              2              1 
      Colorado    Connecticut       Delaware        Florida        Georgia 
             2              2              1              1              2 
        Hawaii          Idaho       Illinois        Indiana           Iowa 
             2              2              1              2              2 
        Kansas       Kentucky      Louisiana          Maine       Maryland 
             2              2              1              2              1 
 Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
             2              1              2              1              2 
       Montana       Nebraska         Nevada  New Hampshire     New Jersey 
             2              2              1              2              2 
    New Mexico       New York North Carolina   North Dakota           Ohio 
             1              1              1              2              2 
      Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
             2              2              2              2              1 
  South Dakota      Tennessee          Texas           Utah        Vermont 
             2              2              2              2              2 
      Virginia     Washington  West Virginia      Wisconsin        Wyoming 
             2              2              2              2              2
38
répondu Roman Luštrik 2011-06-29 09:45:01

Disons,

y<-dist(x)
clust<-hclust(y)
groups<-cutree(clust, k=3)
x<-cbind(x,groups)

Maintenant, vous obtiendrez pour chaque enregistrement, le groupe de cluster. Vous pouvez également sous-ensemble l'ensemble de données:

x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)
15
répondu user2783711 2013-09-16 11:40:40