En utilisant la méthode plot(hclust(dist(x)))
, j'ai pu dessiner une carte d'arborescence de cluster. Ça marche. Pourtant, je voudrais obtenir une liste de tous les clusters, pas un diagramme d'arbre, car j'ai une énorme quantité de données (comme 150K nœuds) et l'intrigue devient désordonnée.
En d'autres termes, disons si a b c
est un cluster et si d e f g
est un cluster alors j'aimerais 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 en tant que "sortie". Ce n'est qu'un exemple. J'aimerais simplement pouvoir obtenir une liste de clusters au lieu d'un arbre. Il peut s'agir de vecteurs, de matrices ou simplement de simples nombres qui montrent à quels groupes appartiennent les éléments.
Comment est-ce possible?
J'utiliserai l'ensemble de données disponible dans R pour montrer comment couper un arbre en nombre souhaité de morceaux. Le résultat est un tableau.
Construisez 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 ma prochaine astuce, 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 du paramètre 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)
vous obtiendrez maintenant pour chaque enregistrement, le groupe de clusters. Vous pouvez également sous-définir l'ensemble de données:
x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)