Comment produire un joli graphique des résultats de l'analyse par grappes k-means?

77

J'utilise R pour faire du clustering K-means. J'utilise 14 variables pour exécuter K-means

  • Quelle est une jolie façon de tracer les résultats de K-means?
  • Y a-t-il des implémentations existantes?
  • Avoir 14 variables complique-t-il la représentation graphique des résultats?

J'ai trouvé quelque chose appelé GGcluster qui a l'air cool mais qui est encore en développement. J'ai aussi lu quelque chose sur la cartographie sammon, mais je ne l'ai pas très bien comprise. Serait-ce une bonne option?

JEquihua
la source
1
Si, pour une raison quelconque, les solutions actuelles à ce problème très pratique vous intéressent, envisagez d'ajouter des commentaires aux réponses existantes ou de mettre à jour votre publication avec davantage de contexte. Travailler avec 40 000 cas est une information importante ici.
chl
Un autre exemple avec 11 classes et 10 variables est à la page 118 de Elements of Statistical Learning ; pas très informatif.
denis
bibliothèque (animation) kmeans.ani (yourData, centres = 2)
Kartheek Palepu

Réponses:

27

Je pousserais le diagramme de silhouette pour cela, car il est peu probable que vous obteniez beaucoup d'informations exploitables à partir des diagrammes de paires lorsque le nombre de dimension est 14.

library(cluster)
library(HSAUR)
data(pottery)
km    <- kmeans(pottery,3)
dissE <- daisy(pottery) 
dE2   <- dissE^2
sk2   <- silhouette(km$cl, dE2)
plot(sk2)

Cette approche est très citée et bien connue (voir ici pour une explication).

Rousseeuw, PJ (1987) Silhouettes: Une aide graphique à l'interprétation et à la validation de l'analyse par grappes . J. Comput. Appl. Math. , 20 , 53-65.

utilisateur603
la source
J'aime ça. Je vais regarder plus loin. Je vous remercie.
JEquihua
@ user603: Souhaitez-vous donner l'essentiel de l'explication dans votre réponse? Le lien que vous avez donné il y a deux ans et demi est mort. L'article est toujours là, mais une courte introduction à cette technique serait bien.
Steen
Le lien pointait vers le papier (c’était un point d’accès sans porte, qui est devenu noir).
user603
J'ai un complot étrange avec cette silhoette (à gauche est la grappe et à droite est silhoette, est-ce prévu?) - i.imgur.com/ZIpPlhT.png
vipin8169
56

Voici un exemple qui peut vous aider:

library(cluster)
library(fpc)

data(iris)
dat <- iris[, -5] # without known classification 
# Kmeans clustre analysis
clus <- kmeans(dat, centers=3)
# Fig 01
plotcluster(dat, clus$cluster)

# More complex
clusplot(dat, clus$cluster, color=TRUE, shade=TRUE, 
         labels=2, lines=0)

# Fig 03
with(iris, pairs(dat, col=c(1:3)[clus$cluster])) 

Sur la base de ce dernier graphique, vous pouvez choisir les variables initiales à tracer. Peut-être que 14 variables sont énormes. Vous pouvez donc essayer une analyse en composantes principales avant d’utiliser les deux ou trois premières composantes de la PCA pour effectuer l’analyse par grappes.

Manuel Ramón
la source
1
Je suis incapable de comprendre comment interpréter dc1 et dc2? Pourriez-vous me diriger dans la bonne direction?
UD1989
1
@Upasana Datta: les deux composants résultent de l'application de l'analyse en composants principaux (PCA, function princomp) aux données. Ce sont des combinaisons linéaires des variables d’entrée qui expliquent la plus grande partie de la variabilité des observations.
Rakensi
Bonjour, je suis perplexe de savoir comment l'ellipse est calculée dans la deuxième parcelle? Comment détermine-t-il "ces deux composantes expliquent 95,81% de la variabilité ponctuelle"?
mynameisJEFF
@mynameisJEFF Je suppose que cela utilise des variables latentes / canoniques, des valeurs propres, etc. Vous pouvez consulter la documentation, mais c'est généralement ce que cela signifie lorsque vous voyez un biplot étiqueté comme tel. Cela signifie que 95,81% de la variation des données est expliquée par les 2 variables latentes sur lesquelles les données sont tracées. Mise à jour - Je viens de googler cela et, en effet, il utilise des composants principaux.
Hack-R
Pourquoi avez-vous besoin de "avec" ici? Il serait plus simple de quitter la pairsfonction.
Anatolii Stepaniouk
4

Le moyen le plus simple que je connaisse est le suivant:

X <- data.frame(c1=c(0,1,2,4,5,4,6,7),c2=c(0,1,2,3,3,4,5,5))
km <- kmeans(X, center=2)
plot(X,col=km$cluster)
points(km$center,col=1:2,pch=8,cex=1)

De cette façon, vous pouvez dessiner les points de chaque groupe en utilisant une couleur différente et leurs centroïdes.

DarioSka
la source