Wie bei jeder Methode gibt es hier auch unterschiedlichste Varianten: Connectivity-, Centroid-, Distribution- und Density-based Clustering. Im Folgenden stelle ich das kmeans-Clustering näher vor, welche zum centroid-based clustering gehört. Zwar gibt es im Internet schon super viele Zusammenfassungen und Anleitungen. Mein Versuch ist hier, möglichst prägnant die einzelnen Schritte aufzuzeigen. Bei Fragen googelt ihr einfach den entsprechenden Begriff und lest die 100 Seiten dazu dann durch ;) Dazu, wie kmeans funktioniert empfehle ich aber Youtube. Kurz gesagt ordnet kmeans einzelne Beobachtungen einem Cluster (-Zentrum) zu, zu welchem es (statistisch) am besten passt.
Praktisch arbeite ich mich im Folgenden am R-inhärenten Datensatz USArrests ab. Dies sind Statistiken zu Festnahmen pro 100.000 Einwohner für Assault, Murder und Rape (also Überfall, Mord, Vergewaltigung) in den 50 US-Bundesstaaten für 1973. Zusätzlich enthält der Datensatz den Anteil der Bevölkerung, welcher urban lebt. Die ausführliche Clusteranalyse gibt es zum Beispiel hier oder hier.
1. Datenaufbereitung
Wähle jene Daten, welche deiner Meinung nach gut zur Unterscheidung der Beobachtungen dienen.
Die Daten müssen wiefolgt aufbereitet werden:
Die Daten müssen wiefolgt aufbereitet werden:
2. Distanzberechnung
Clustering bezieht sich maßgeblich auf die Distanz zwischen Beobachtungen. Klassischerweise wird die Euklidische oder Manhattan-Distanz benutzt; es gibt auch noch weitere (hier werden diese ganz gut beschrieben).
Die Standardfunktion in R sieht wiefolgt aus: kmeans(x, centers, iter.max=10, nstart =1) mit folgenden Aspekten:
3. Anzahl an Clustern
Variante 3 / "Silhouette-Style"
-> 2 Cluster
Variante 4 / "Gap Statistic-Style"
4. Finales Clustering & Analyse
Mit dieser perfekten Anzahl an Clustern kann nun das optimale Ergebnis genauer analysiert werden. Dazu dienen die folgenden Befehle:
kn$cluster - ein Vektor (1:k) welcher die einzelnen Beobachtungen den Clustern zuordnet
kn$centers - eine Matrix der Cluster Zentren
kn$totss - total sum of squares (TSS) zur Varianz der Daten
kn$withinss - within-cluster sum of squares (pro Cluster eine)
kn$betweenss - between-cluster sum of squares (also zwischen den einzelnen Clustern)
kn$size - die Größe der Cluster
5. Visualisierung
Die Darstellung des Ergebnisses kann ein sehr uneindeutiges Bild liefern. Hier kann die Principal Performance Analysis (PCA) benutzt werden und das Ergebnis kann gegen die ersten beiden PCs visualisiert werden.
6. Validierung
Machen die Cluster Sinn oder ist es nur ein Ergebnis der Anwendung eines statistischen Algorithmus? Zudem muss man sich über folgende Nachteile bewusst sein, z.B. dass man die Daten schon kennen sollte, bzw. sich aneignen sollte.
Clustering bezieht sich maßgeblich auf die Distanz zwischen Beobachtungen. Klassischerweise wird die Euklidische oder Manhattan-Distanz benutzt; es gibt auch noch weitere (hier werden diese ganz gut beschrieben).
Die Standardfunktion in R sieht wiefolgt aus: kmeans(x, centers, iter.max=10, nstart =1) mit folgenden Aspekten:
- centers - die Anzahl an Clustern, die berechnet werden soll
- iter.max - die maximale Anzahl an Iterationen; standardmäßig 10
- nstart - die Anzahl an zufälligen Startpositionen; dies ist insofern wichtig, da der Algorithmus nur lokale Minima findet. Um nicht an einem solchen "hängen" zu bleiben, ist nstart=25 üblich; d.h. das beste Ergebnis aus 25 Versuchen wird übernommen.
Man kann hier schon gut erkennen, dass es untereinander ähnliche und auch sehr verschiedene Staaten gibt.
Variante 1 / "Ellbow-Style"
Zur Bestimmung der optimalen Anzahl an Clustern wird die Fehlerquadratsumme (RSS oder auch withinss) für eine wachsende Anzahl an Clusters (k) berechnet; je kleiner, desto kompakter das Cluster. Dort, wo die Kurve von RSS zur Anzahl k einen "Knick" macht, also die Fehlerquadratsumme mit einem zusätzlichen Cluster nicht mehr signifikant steigt, liegt die optimale Anzahl an Clustern.
Zur Bestimmung der optimalen Anzahl an Clustern wird die Fehlerquadratsumme (RSS oder auch withinss) für eine wachsende Anzahl an Clusters (k) berechnet; je kleiner, desto kompakter das Cluster. Dort, wo die Kurve von RSS zur Anzahl k einen "Knick" macht, also die Fehlerquadratsumme mit einem zusätzlichen Cluster nicht mehr signifikant steigt, liegt die optimale Anzahl an Clustern.
-> 3 oder 4 Cluster
Variante 2 / "Ellbow-Style" (nur anders berechnet)
-> 2 oder 4 Cluster
Variante 3 / "Silhouette-Style"
Hier wird die Qualität des Clustering gemessen. Eine hohe Silhouette deutet auf ein gutes Clustering hin; insofern suchen wir das k mit der maximalen Silhouette.
-> 2 Cluster
Variante 4 / "Gap Statistic-Style"
Hierbei wird die total intracluster variation für verschiedene k mit dem erwarteten Wert bei einer simulierten Verteilung ohne offensichtliche Cluster verglichen. Dazu wird eine Monte Carlo Simulation angewendet
-> 4 Cluster
Mit dieser perfekten Anzahl an Clustern kann nun das optimale Ergebnis genauer analysiert werden. Dazu dienen die folgenden Befehle:
kn$cluster - ein Vektor (1:k) welcher die einzelnen Beobachtungen den Clustern zuordnet
kn$centers - eine Matrix der Cluster Zentren
kn$totss - total sum of squares (TSS) zur Varianz der Daten
kn$withinss - within-cluster sum of squares (pro Cluster eine)
kn$betweenss - between-cluster sum of squares (also zwischen den einzelnen Clustern)
kn$size - die Größe der Cluster
5. Visualisierung
Die Darstellung des Ergebnisses kann ein sehr uneindeutiges Bild liefern. Hier kann die Principal Performance Analysis (PCA) benutzt werden und das Ergebnis kann gegen die ersten beiden PCs visualisiert werden.
6. Validierung
Machen die Cluster Sinn oder ist es nur ein Ergebnis der Anwendung eines statistischen Algorithmus? Zudem muss man sich über folgende Nachteile bewusst sein, z.B. dass man die Daten schon kennen sollte, bzw. sich aneignen sollte.
Photo by Ylanite Koppensfrom Pexels