ComeçarComece de graça

Questões práticas: trabalhando com dados reais

Lidar com dados reais costuma ser mais desafiador do que trabalhar com dados sintéticos. Dados sintéticos ajudam no aprendizado de novos conceitos e técnicas, mas os próximos exercícios vão usar dados mais próximos do que você encontra em contextos profissionais ou acadêmicos.

O primeiro desafio com os dados de Pokemon é que não há um número de clusters pré-determinado. Você vai definir o número apropriado de clusters, lembrando que, com dados reais, o cotovelo no scree plot pode ser menos nítido do que em dados sintéticos. Use seu julgamento para decidir o número de clusters.

A segunda parte deste exercício inclui plotar os resultados do agrupamento em duas dimensões, ou features, dos dados. Essas features foram escolhidas de forma um tanto arbitrária para este exercício. Pense em como você usaria gráficos e clustering para comunicar grupos interessantes de Pokemon para outras pessoas.

Observação adicional: este exercício utiliza o argumento iter.max em kmeans(). Como você viu, kmeans() é um algoritmo iterativo, repetindo várias vezes até que algum critério de parada seja atingido. O número padrão de iterações de kmeans() é 10, o que não é suficiente para o algoritmo convergir e atingir seu critério de parada, então vamos definir o número de iterações como 50 para contornar esse problema. Para ver o que acontece quando kmeans() não converge, tente executar o exemplo com um número menor de iterações (por exemplo, 3). Este é mais um exemplo do que pode acontecer quando você trabalha com dados reais e casos reais.

Este exercício faz parte do curso

Aprendizado não supervisionado em R

Ver curso

Instruções do exercício

O conjunto de dados pokemon, que contém observações de 800 personagens de Pokemon em 6 dimensões (isto é, features), está disponível no seu workspace.

  • Usando kmeans() com nstart = 20, determine a soma total dos erros quadráticos dentro dos clusters para diferentes números de clusters (entre 1 e 15).
  • Escolha um número apropriado de clusters com base nesses resultados da primeira instrução e atribua esse número a k.
  • Crie um modelo de k-means usando k clusters e atribua-o à variável km.out.
  • Crie um gráfico de dispersão de Defense vs. Speed, mostrando a associação de cluster para cada observação.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 e executar o código