Praxis: Arbeiten mit echten Daten
Mit echten Daten zu arbeiten ist oft anspruchsvoller als mit synthetischen Daten. Synthetische Daten helfen dabei, neue Konzepte und Techniken zu lernen, aber in den nächsten Übungen arbeitest du mit Daten, die eher dem entsprechen, was du in der Praxis oder im Studium vorfindest.
Die erste Herausforderung bei den Pokemon-Daten ist, dass es keine vorher festgelegte Anzahl von Clustern gibt. Du bestimmst die passende Anzahl an Clustern. Denk daran, dass das Knick-Signal im Scree-Plot bei echten Daten oft weniger deutlich ausfällt als bei synthetischen Daten. Nutze dein Urteil, um die Anzahl der Cluster festzulegen.
Im zweiten Teil dieser Übung visualisierst du die Ergebnisse der Clusteranalyse in zwei Dimensionen bzw. Features der Daten. Diese Features wurden für diese Übung etwas willkürlich gewählt. Überlege dir, wie du mit Visualisierung und Clustering interessante Gruppen von Pokemon für andere verständlich machen würdest.
Zusätzlicher Hinweis: Diese Übung verwendet das Argument iter.max in kmeans(). Wie du gesehen hast, ist kmeans() ein iterativer Algorithmus, der wiederholt, bis ein Abbruchkriterium erreicht ist. Die Standardanzahl an Iterationen für kmeans() ist 10, was nicht immer ausreicht, damit der Algorithmus konvergiert und sein Abbruchkriterium erreicht. Daher setzen wir die Anzahl der Iterationen auf 50, um dieses Problem zu vermeiden. Um zu sehen, was passiert, wenn kmeans() nicht konvergiert, probiere das Beispiel mit einer geringeren Anzahl an Iterationen (z. B. 3) aus. Das ist ein weiteres Beispiel dafür, was in realen Datensituationen passieren kann.
Diese Übung ist Teil des Kurses
<Kurs>Unüberwachtes Lernen in R</Kurs>Übungsanweisungen
Der Datensatz pokemon mit 800 Beobachtungen von Pokemon-Charakteren und 6 Dimensionen (also Features) steht in deinem Workspace bereit.
- Bestimme mit
kmeans()undnstart = 20die Summe der quadratischen Fehler innerhalb der Cluster (total within sum of squares) für unterschiedliche Anzahlen von Clustern (zwischen 1 und 15). - Wähle basierend auf diesen Ergebnissen aus dem ersten Schritt eine passende Clusteranzahl und weise diese Zahl
kzu. - Erstelle ein k-means-Modell mit
kClustern und speichere es in der Variablenkm.out. - Erstelle ein Streudiagramm von
DefensegegenSpeedund zeige die Clusterzugehörigkeit für jede Beobachtung.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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")