Über k-means können Sie speziell die Lückenstatistik verwenden. Grundsätzlich besteht die Idee darin, die Güte des Clustering-Maßes basierend auf der durchschnittlichen Streuung im Vergleich zu einer Referenzverteilung für eine zunehmende Anzahl von Clustern zu berechnen. Weitere Informationen finden Sie im Original:
Tibshirani, R., Walther, G. und Hastie, T. (2001). Schätzung der Anzahl von Clustern in einem Datensatz über die Lückenstatistik . JR Statist. Soc. B, 63 (2): 411 & ndash; 423.
Die Antwort, die ich auf eine verwandte Frage gegeben habe, hebt andere allgemeine Gültigkeitsindizes hervor, anhand derer überprüft werden kann, ob ein gegebener Datensatz eine Art Struktur aufweist.
Wenn Sie keine Ahnung haben, was Sie erwarten würden, wenn nur Rauschen vorhanden wäre, ist es ein guter Ansatz, Resampling zu verwenden und die Stabilität von Clustern zu untersuchen. Mit anderen Worten, nehmen Sie eine erneute Abtastung Ihrer Daten vor (per Bootstrap oder durch Hinzufügen von Rauschen) und berechnen Sie die "Nähe" der resultierenden Partitionen, gemessen an Jaccard- Ähnlichkeiten. Kurz gesagt, es ermöglicht die Abschätzung der Häufigkeit, mit der ähnliche Cluster in den Daten wiederhergestellt wurden. Diese Methode ist im fpc R-Paket als verfügbar clusterboot()
. Es verwendet entweder Rohdaten oder eine Distanzmatrix als Eingabe und ermöglicht die Anwendung einer Vielzahl von Clustering-Methoden (hierarchische, k-Means-, Fuzzy-Methoden). Die Methode wird in den verlinkten Quellen beschrieben:
Hennig, C. (2007) Clusterbasierte Bewertung der Clusterstabilität .
Computational Statistics and Data Analysis , 52, 258 & ndash; 271.
Hennig, C. (2008) Auflösungspunkt und Isolationsrobustheit: Robustheitskriterien für allgemeine Methoden der Clusteranalyse . Journal of Multivariate Analysis , 99, 1154 & ndash; 1176.
Unten sehen Sie eine kleine Demonstration mit dem k-means-Algorithmus.
sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
sim.xy(100, c(2.5,0), c(.4,.2)),
sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
clustermethod=kmeansCBI,
krange=3, seed=15555)
Die Ergebnisse in diesem künstlichen (und gut strukturierten) Datensatz sind recht positiv, da keiner der drei Cluster ( krange
) über die Proben hinweg aufgelöst wurde und die durchschnittliche clusterweise Jaccard-Ähnlichkeit für alle Cluster> 0,95 beträgt.
Unten sehen Sie die Ergebnisse für die 20 Bootstrap-Beispiele. Wie zu sehen ist, bleiben statistische Einheiten in der Regel in demselben Cluster zusammengefasst, mit wenigen Ausnahmen für die dazwischen liegenden Beobachtungen.
Sie können diese Idee natürlich auf jeden Gültigkeitsindex erweitern: Wählen Sie eine neue Reihe von Beobachtungen durch Bootstrap (mit Ersetzung) aus, berechnen Sie Ihre Statistik (z. B. Silhouette-Breite, kophenetische Korrelation, Huberts Gamma, innerhalb der Quadratsumme) für einen Bereich von Cluster-Nummern (z. B. 2 bis 10) wiederholen Sie 100 oder 500 Mal und sehen Sie sich das Boxplot Ihrer Statistik als Funktion der Cluster-Nummer an.
Folgendes erhalte ich mit demselben simulierten Datensatz, jedoch unter Verwendung der hierarchischen Clustering-Methode von Ward und unter Berücksichtigung der kophenetischen Korrelation (mit der beurteilt wird, wie gut Abstandsinformationen in den resultierenden Partitionen reproduziert werden) und der Silhouette-Breite (ein Kombinationsmaß zur Beurteilung der Homogenität und Inter-Cluster-Homogenität). Cluster-Trennung).
Die cophenetische Korrelation reicht von 0,6267 bis 0,7511 mit einem Medianwert von 0,7031 (500 Bootstrap-Samples). Die Silhouette scheint maximal zu sein, wenn wir 3 Cluster betrachten (Median 0,8408, Bereich 0,7371-0,8769).