Aan de slagBegin gratis

Praktische zaken: werken met echte data

Werken met echte data is vaak uitdagender dan werken met synthetische data. Synthetische data helpt om nieuwe concepten en technieken te leren, maar in de volgende oefeningen werk je met data die dichter ligt bij het soort echte data dat je in je werk of studie kunt tegenkomen.

De eerste uitdaging met de Pokemon-data is dat er geen vooraf bepaald aantal clusters is. Jij bepaalt het juiste aantal clusters, met in het achterhoofd dat in echte data de elbow in de screeplot minder scherp kan zijn dan bij synthetische data. Gebruik je eigen oordeel om het aantal clusters te kiezen.

In het tweede deel van deze oefening visualiseer je de uitkomsten van het clusteren op twee dimensies (features) van de data. Deze features zijn voor deze oefening enigszins willekeurig gekozen. Denk na over hoe je met visualisaties en clustering interessante groepen Pokemon aan anderen zou laten zien.

Nog een opmerking: in deze oefening gebruiken we het argument iter.max van kmeans(). Zoals je hebt gezien is kmeans() een iteratief algoritme dat herhaald wordt totdat aan een stopcriterium is voldaan. Het standaard aantal iteraties voor kmeans() is 10, wat niet genoeg is voor het algoritme om te convergeren en het stopcriterium te bereiken, daarom zetten we het aantal iteraties op 50 om dit te verhelpen. Om te zien wat er gebeurt als kmeans() niet convergeert, kun je het voorbeeld eens draaien met een lager aantal iteraties (bijv. 3). Dit is opnieuw een voorbeeld van wat je kunt tegenkomen met echte data en echte casussen.

Deze oefening maakt deel uit van de cursus

Unsupervised learning in R

Bekijk cursus

Oefeninstructies

De pokemon-gegevensset, met 800 Pokemon-personages en 6 dimensies (features), is beschikbaar in je werkruimte.

  • Bepaal met kmeans() en nstart = 20 de totale binnen-cluster som van kwadratische fouten voor verschillende aantallen clusters (tussen 1 en 15).
  • Kies op basis van deze resultaten een passend aantal clusters en wijs dat aantal toe aan k.
  • Maak een k-meansmodel met k clusters en sla dit op in de variabele km.out.
  • Maak een scatterplot van Defense tegen Speed, waarbij je het clusterschap voor elke observatie laat zien.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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")
Code bewerken en uitvoeren