ComenzarEmpieza gratis

Cuestiones prácticas: trabajar con datos reales

Trabajar con datos reales suele ser más difícil que con datos sintéticos. Los datos sintéticos ayudan a aprender conceptos y técnicas nuevas, pero los próximos ejercicios trabajarán con datos más cercanos al tipo de datos reales que podrías encontrar en tu actividad profesional o académica.

El primer reto con los datos de Pokemon es que no hay un número de clústeres predefinido. Tú determinarás el número adecuado de clústeres, teniendo en cuenta que en datos reales el codo en el gráfico de sedimentación (scree plot) puede ser menos marcado que en datos sintéticos. Usa tu criterio para decidir el número de clústeres.

La segunda parte de este ejercicio incluye representar los resultados del clustering en dos dimensiones, o características, de los datos. Estas características se eligieron de forma algo arbitraria para este ejercicio. Piensa en cómo utilizarías gráficos y clustering para comunicar grupos interesantes de Pokemon a otras personas.

Una nota adicional: este ejercicio utiliza el argumento iter.max de kmeans(). Como has visto, kmeans() es un algoritmo iterativo, que se repite una y otra vez hasta que se alcanza algún criterio de parada. El número predeterminado de iteraciones en kmeans() es 10, lo cual no es suficiente para que el algoritmo converja y alcance su criterio de parada, así que estableceremos el número de iteraciones en 50 para evitar este problema. Para ver qué ocurre cuando kmeans() no converge, prueba a ejecutar el ejemplo con un número menor de iteraciones (p. ej., 3). Este es otro ejemplo de lo que puede pasar cuando trabajas con datos reales y casos reales.

Este ejercicio forma parte del curso

Unsupervised Learning in R

Ver curso

Instrucciones del ejercicio

El conjunto de datos pokemon, que contiene observaciones de 800 personajes de Pokemon en 6 dimensiones (es decir, características), está disponible en tu espacio de trabajo.

  • Usando kmeans() con nstart = 20, determina la suma total de errores cuadráticos dentro de los grupos para distintos números de clústeres (entre 1 y 15).
  • Elige un número adecuado de clústeres basándote en estos resultados de la primera instrucción y asígnalo a k.
  • Crea un modelo k-means usando k clústeres y asígnalo a la variable km.out.
  • Crea un diagrama de dispersión de Defense frente a Speed, mostrando la pertenencia a clúster de cada observación.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Initialize total within sum of squares error: wss
wss <- 0

# Look over 1 to 15 possible clusters
for (i in ___) {
  # Fit the model: km.out
  km.out <- kmeans(___, centers = ___, nstart = ___, iter.max = 50)
  # Save the within cluster sum of squares
  wss[i] <- ___
}

# Produce a scree plot
plot(1:15, wss, type = "b", 
     xlab = "Number of Clusters", 
     ylab = "Within groups sum of squares")

# Select number of clusters
k <- ___

# Build model with k clusters: km.out
km.out <- kmeans(___, centers = ___, nstart = ___, iter.max = 50)

# View the resulting model
km.out

# Plot of Defense vs. Speed by cluster membership
plot(pokemon[, c("Defense", "Speed")],
     col = km.out$cluster,
     main = paste("k-means clustering of Pokemon with", k, "clusters"),
     xlab = "Defense", ylab = "Speed")
Editar y ejecutar código