Clustering hängt unter anderem von der Größe ab . Diskussionen zu diesem Thema finden Sie unter ( unter anderem ) Wann sollten Sie Daten zentrieren und standardisieren? und PCA zur Kovarianz oder Korrelation? .
Hier sehen Sie Ihre Daten mit einem Seitenverhältnis von 1: 1, aus dem hervorgeht, wie stark sich die Maßstäbe der beiden Variablen unterscheiden:
Rechts davon zeigt das Diagramm der Lückenstatistiken die Statistik nach Anzahl der Cluster ( ) mit Standardfehlern, die mit vertikalen Segmenten gezeichnet wurden, und dem optimalen Wert von der mit einer vertikalen gestrichelten blauen Linie markiert ist. Nach der Hilfe,kkclusGap
Die Standardmethode "firstSEmax" sucht nach dem kleinsten , sodass sein Wert nicht mehr als 1 Standardfehler vom ersten lokalen Maximum entfernt ist.kf( k )
Andere Methoden verhalten sich ähnlich. Dieses Kriterium lässt keine der Lückenstatistiken auffallen, was zu einer Schätzung von .k = 1
Die Auswahl des Maßstabs hängt von der Anwendung ab. Ein vernünftiger Standardausgangspunkt ist jedoch ein Maß für die Streuung der Daten, z. B. die MAD oder die Standardabweichung. In diesem Diagramm wird die Analyse nach dem erneuten Zentrieren auf Null und dem erneuten Skalieren wiederholt, um eine Einheitsstandardabweichung für jede Komponente und :einb
Die K-Means-Lösung wird durch Variieren des Symboltyps und der Farbe im Streudiagramm der Daten auf der linken Seite angezeigt. Unter der Menge ist in der Darstellung der Lückenstatistik auf der rechten Seite eindeutig bevorzugt: Es ist das erste lokale Maximum und die Statistik für kleineres (das heißt, ) sind deutlich niedriger. Größere Werte für passen wahrscheinlich zu einem so kleinen Datensatz, und keiner ist signifikant besser als . Sie werden hier nur gezeigt, um die allgemeine Methode zu veranschaulichen. k ∈ { 1 , 2 , 3 , 4 , 5 } k = 2 k k = 1 k k = 2k = 2k ∈ { 1 , 2 , 3 , 4 , 5 }k = 2kk = 1kk = 2
Hier ist R
Code, um diese Zahlen zu produzieren. Die Daten stimmen ungefähr mit den Angaben in der Frage überein.
library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
#
# Estimate optimal cluster count and perform K-means with it.
#
gap <- clusGap(xy, kmeans, K.max=10, B=500)
k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
fit <- kmeans(xy, k)
#
# Plot the results.
#
pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
plot(xy, asp=1, main=title, pch=pch, col=col)
plot(gap, main=paste("Gap stats,", title))
abline(v=k, lty=3, lwd=2, col="Blue")
#
# Prepare for the next step.
#
xy <- apply(xy, 2, scale)
title <- "Standardized data"
}
xy
den Code durchxy <- xy[, 1, drop=FALSE]
(um ein Array von erstellen). Wenn Sie nicht verwenden , betrachten Sie dieses kleine Gedankenexperiment: Jedes 1-D-Array kann als 2-D-Array ohne die Abstände zu ändern. Durch Clustering der letzteren werden die ersteren gruppiert. ( x i ) ( x i , 0 )R
Ich denke, Sie verstehen nichts Falsches an Ihrer Verwendung der GAP-Statistik. Ich glaube, dass Sie durch den Umfang der Daten in der Visualisierung teilweise irregeführt werden. Sie sehen zwei Cluster, aber tatsächlich ist dieK= 1 K> 1 . Das Methodenpapier zur Beschreibung der GAP-Statistik ist online verfügbar, wenn Sie die technischen Details genauer prüfen möchten.
x
Richtung im Vergleich zury
Richtung eher klein . Basierend darauf würden Sie zwei lange Cluster erwarten . Trotzdem sieht es so aus, als ob Ihre eine Varianz die andere dominiert. Da die GAP-Statistik ein Nullmodell mit einer einzelnen Komponente ( ) annimmt und dann versucht, dieses Modell für ein alternatives mit ; Was Sie beobachten, ist die Unfähigkeit, die Null abzulehnen. Bitte beachten Sie, dass die Unfähigkeit, die Nullhypothese abzulehnen, diese nicht erfülltK > 1Ich führe dein Modell mit einem Gaußschen Mischungsmodell aus (GMM - eine Verallgemeinerung von Mitteln, mehr dazu in diesem Thread ). Richtig, auch in diesem Fall deutete die GAP-Statistik auf einen einzelnen Cluster hin. Der BIC schlug auch einen einzelnen Cluster vor. AIC schlägt 4 Cluster (!) Vor, was ein klares Zeichen dafür ist, dass wir anfangen, uns zu übertreiben. Die verwendete Stichprobe ist nicht extrem groß; Sie haben 21 Punkte, bei denen ein Varianzmodus den anderen dominiert. Es ist ein bisschen schwierig, zwei 2-D-Cluster (dh zwei 2-D-Mittelwerte und zwei Kovarianz-Matrizen) mit nur 21 2-D-Punkten zu haben. :) (Im Fall von Means ist Ihre Kovarianzmatrix strukturierter (Sie betrachten keine Kovarianzen), aber ich würde mich hier nicht darauf konzentrieren.)2 × 2 kk 2 × 2 k
EDIT: Nur der Vollständigkeit halber: @whuber zeigte, dass zwei Cluster in Mitteln als optimal erscheinen würden, wenn man seine Daten standardisieren würde; Das auf die GMM-Anpassung angewendete GAP-Kriterium ergibt auch als die optimale Anzahl von Clustern, wenn man die Daten standardisiert.K = 2k K= 2
quelle
Ich hatte das gleiche Problem wie das Originalplakat. Die R-Dokumentation besagt derzeit, dass die ursprüngliche und Standardeinstellung von d.power = 1 falsch war und durch d.power ersetzt werden sollte: "Die Standardeinstellung d.power = 1 entspricht der" historischen "R-Implementierung, wohingegen d.power = 2 entspricht dem, was Tibshirani et al vorgeschlagen hatten. Dies wurde von Juan Gonzalez in 2016-02 gefunden. "
Folglich löste das Ändern von d.power = 2 das Problem für mich.
https://www.rdocumentation.org/packages/cluster/versions/2.0.6/topics/clusGap
quelle