4 votos

Lectura de datos y gráfico de Kmeans desde R

Realicé y tracé un análisis kmeans en R con los siguientes comandos:

 km = kmeans(t(mat2), centers = 4)
 plotcluster(t(mat2), km$cluster)      #from library(fpc)

Este es el resultado de la trama: enter image description here

Lo que quiero saber es cómo dar sentido a la km$centers y la trama. Lo que sé es que km$centers es una matriz de 4 X 31. Cada fila representa el cluster correspondiente. Creo que cada columna representa una iteración en el algoritmo (corregidme si me equivoco) por lo que la iteración final y el resultado del algoritmo para los centros vendría dado por:

km$centers[, 31]

 0.008785652 -0.088641371 -0.012666252 -0.079348292 

Debo estar equivocado en muchas cosas porque esto me lleva a las siguientes preguntas:

  1. Los centros dados por km$centers no son coordenadas (x, y). ¿Cómo puedo obtener estas coordenadas centrales (x, y)?
  2. El centro del clúster 4 (según el gráfico) debe ser algo así como (12, 2) pero los números de centro anteriores no reflejan ninguna de estas coordenadas. De hecho, todos los números de la matriz 4 X 31 son menores que 1. Entonces, ¿cuál es la relación entre km$centers ¿y la trama?

El objetivo final es crear una correspondencia (no mencionada aquí) basada en las coordenadas (x, y).

¡Toda ayuda es muy apreciada!

6voto

Rob Allen Puntos 486

Creo que te estás liando con la diferencia entre el centro del racimo real y el centro de los 1s, 2s, etc. en tu parcela.

El centro real de su cluster está en un espacio de alta dimensión, donde el número de dimensiones está determinado por el número de atributos que está utilizando para la agrupación. Por ejemplo, si sus datos tienen 100 filas y 8 columnas, entonces kmeans interpreta que tiene que tener 100 ejemplos para agrupar, cada uno de los cuales tiene ocho atributos. Supongamos que se llama

km = kmeans(myData, 4)

Entonces, km$centers será una matriz con cuatro filas y ocho columnas. El centro del cluster #1 está en km$centers[1,:] --los ocho valores que hay dan su posición en el espacio 8-D. El centro del Cluster #2 está en km$centers[2,:] y así sucesivamente. Si en lugar de eso tuviera ochenta atributos, entonces cada centro (por ejemplo, km$centers[1,:] , km$centers[2,:] ) tendría una longitud de ochenta valores y correspondería a un punto en un espacio de ochenta dimensiones.

Esto está muy bien, porque preservar el espacio nos permite interpretar los clusters (por ejemplo, estas personas son muy ricas, tienen la presión arterial alta, etc.) y nos permite asignar nuevos ejemplos a los clusters existentes. Sin embargo, es difícil visualizar algo con $>3$ dimensiones, por lo que plotcluster se reduce a dos dimensiones más manejables, que pueden trazarse fácilmente.

Mi opinión es que, a efectos de concordancia, deberías optar por los centros originales, en lugar de los dados por plotcluster . Sin embargo, si realmente quieres esos, parece que plotcluster llama a discrproj internamente, así que podrías hacerlo tú mismo.

Enlaces:

4voto

Dominic D Puntos 936

Si el kmeans en la base es una opción, esto funcionará:

# prepare data (from kmeans help)
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")

# calculate k-means
(cl <- kmeans(x, 5, nstart = 25))

# plot
plot(x, col = cl$cluster)
points(cl$centers, col = 1:5, pch = 8)

# select points of interest
# returns row number of selected point
identify(x[,1], x[,2])
# click away on the plot... 
# then press escape to get the points

# find co-ords for selected point
# in this case, point at row 16
x[16,]

4voto

H.-Dirk Schmitt Puntos 2849

identify no funciona con la trama dada por plotcluster . Así que para contrarrestar esto necesitamos obtener las coordenadas bidimensionales que plotcluster está usando. En la documentación se indica que plotcluster utiliza discrproj$proj para obtener coordenadas bidimensionales. Así que para obtener el mismo gráfico que utiliza plot haz lo siguiente:

plot(discrproj(t(mat2), km$cluster)$proj, col = km$cluster)

Para conseguir identify para trabajar:

 identify(discrproj(t(mat2), km$cluster)$proj, col = km$cluster)

Ahora, podemos hacer clic en los puntos del gráfico, y se dará la fila correspondiente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X