Selecionando o número de clusters
O algoritmo k-means assume o número de clusters como parte da entrada. Se você já souber o número de clusters (por exemplo, devido a certas restrições de negócio), fica fácil defini-lo. Porém, como você viu no vídeo, se não souber e precisar determiná-lo, será necessário executar o algoritmo várias vezes, cada uma com um número diferente de clusters. A partir disso, você pode observar como uma medida de qualidade do modelo muda conforme o número de clusters.
Neste exercício, você vai executar kmeans() várias vezes para ver como a qualidade do modelo muda à medida que o número de clusters varia. Gráficos que exibem essa informação ajudam a determinar o número de clusters e são frequentemente chamados de scree plots.
O gráfico ideal terá um cotovelo, onde a medida de qualidade passa a melhorar mais lentamente conforme o número de clusters aumenta. Isso indica que a qualidade do modelo não está mais melhorando de forma substancial à medida que a complexidade do modelo (isto é, o número de clusters) cresce. Em outras palavras, o cotovelo indica o número de clusters inerente aos dados.
Este exercício faz parte do curso
Aprendizado não supervisionado em R
Instruções do exercício
Os dados, x, ainda estão disponíveis no seu ambiente de trabalho.
- Construa 15 modelos
kmeans()emx, cada um com um número diferente de clusters (de 1 a 15). Definanstart = 20para todas as execuções e salve a soma total dos quadrados dentro dos clusters de cada modelo no elementoidewss. - Execute o código fornecido para criar um scree plot do
wsspara todos os 15 modelos. - Observe seu scree plot. Quantos clusters são inerentes aos dados? Defina
kigual ao número de clusters na posição do cotovelo.
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
# For 1 to 15 cluster centers
for (i in ___) {
km.out <- kmeans(___, centers = i, ___)
# Save total within sum of squares to wss variable
wss[i] <- km.out$___
}
# Plot total within sum of squares vs. number of clusters
plot(1:15, wss, type = "b",
xlab = "Number of Clusters",
ylab = "Within groups sum of squares")
# Set k equal to the number of clusters corresponding to the elbow location
k <- ___