¿Cómo producir una bonita gráfica de los resultados del análisis de conglomerados k-means?

77

Estoy usando R para hacer clustering K-means. Estoy usando 14 variables para ejecutar K-means

  • ¿Cuál es una manera bonita de trazar los resultados de K-means?
  • ¿Hay implementaciones existentes?
  • ¿Tener 14 variables complica el trazado de los resultados?

Encontré algo llamado GGcluster que se ve genial pero todavía está en desarrollo. También leí algo sobre el mapeo sammon, pero no lo entendí muy bien. ¿Sería esta una buena opción?

JEquihua
fuente
1
Si por alguna razón le preocupan las soluciones actuales para este problema tan práctico, considere agregar comentarios a las respuestas existentes o actualice su publicación con más contexto. Trabajar con 40,000 casos es una información importante aquí.
chl
Otro ejemplo con 11 clases y 10 variables está en la página 118 de Elementos de aprendizaje estadístico ; No es terriblemente informativo.
denis
biblioteca (animación) kmeans.ani (yourData, centers = 2)
Kartheek Palepu

Respuestas:

27

Presionaría el diagrama de la silueta para esto, porque es poco probable que obtenga mucha información procesable de los diagramas de pares cuando el número de dimensión es 14.

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

Este enfoque es muy citado y bien conocido (vea aquí una explicación).

Rousseeuw, PJ (1987) Silhouettes: una ayuda gráfica para la interpretación y validación del análisis de conglomerados . J. Comput. Appl. Matemáticas. , 20 , 53-65.

usuario603
fuente
Me gusta esto. Lo investigaré más a fondo. Gracias.
JEquihua
@ usuario603: ¿Le gustaría dar una idea general de la explicación en su respuesta? El enlace que le diste hace 2.5 años se ha apagado. El artículo todavía está allí, pero una breve introducción a esta técnica sería buena.
Steen
El enlace apuntaba al papel (era un punto de acceso no cerrado, que de hecho se ha oscurecido).
user603
Tengo una parcela raro con este silhoette (a la izquierda es la clusplot y el derecho se trama del bolígrafo, es esta espera?) - i.imgur.com/ZIpPlhT.png
vipin8169
56

Aquí un ejemplo que puede ayudarte:

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

Según el último gráfico, puede decidir cuál de las variables iniciales desea trazar. Tal vez 14 variables son enormes, por lo que puede probar un análisis de componentes principales (PCA) antes y luego usar los primeros dos o tres componentes de la PCA para realizar el análisis de conglomerados.

Manuel Ramón
fuente
1
No puedo entender cómo interpretar dc1 y dc2? ¿Podrías señalarme la dirección correcta?
UD1989
1
@Upasana Datta: Los dos componentes son el resultado de aplicar el análisis de componentes principales (PCA, función princomp) en los datos. Son combinaciones lineales de las variables de entrada que explican la mayor parte de la variabilidad de las observaciones.
rakensi
Hola, estoy desconcertado acerca de cómo se calcula la elipse en la segunda trama. ¿Cómo determina que "estos dos componentes explican el 95.81% de la variabilidad de puntos"?
mynameisJEFF
@mynameisJEFF Supongo que está usando variables latentes / canónicas, valores de signos, etc. Puede verificar la documentación, pero eso es lo que significa cuando ve un biplot etiquetado como tal. Está diciendo que el 95.81% de la variación en los datos se explica por las 2 variables latentes sobre las que se grafican los datos. Actualización: lo busqué en Google y, de hecho, utiliza componentes principales.
Hack-R
¿Por qué necesitas "con" aquí? Sería más sencillo dejar la pairsfunción.
Anatolii Stepaniuk
4

La forma más simple que sé hacer es la siguiente:

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 esta manera, puede dibujar los puntos de cada grupo utilizando un color diferente y sus centroides.

darioSka
fuente