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?
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
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)