Cluster für k-means auswählen: der Fall 1 Cluster

9

Kennt jemand eine gute Methode, um festzustellen, ob Clustering mit kmeans überhaupt angemessen ist? Was ist, wenn Ihre Probe tatsächlich homogen ist? Ich weiß, dass so etwas wie ein Mischungsmodell (über mclust in R) Anpassungsstatistiken für den 1: k-Clusterfall liefert, aber es scheint, dass alle Techniken zur Bewertung von kmean mindestens 2 Cluster erfordern.

Kennt jemand eine Technik zum Vergleichen der 1 und 2 Clusterfälle für kmeans?

Dmartin
quelle

Antworten:

10

Die Lückenstatistik ist eine großartige Möglichkeit, dies zu tun. Tibshirani, Hastie & Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - Das relevante R-Paket.

Die Idee ist, dass es einen sequentiellen Hypothesentest zum Clustering Ihrer Daten für K = 1,2,3, ... gegen eine Nullhypothese des zufälligen Rauschens durchführt, die einem Cluster entspricht. Seine besondere Stärke ist, dass es Ihnen einen zuverlässigen Hinweis darauf gibt, ob K = 1 ist, dh ob es keine Cluster gibt.

Hier ist ein Beispiel: Ich habe vor einigen Tagen einige Astronomiedaten untersucht, und zwar aus einer Exoplaneten-Umfrage. Ich wollte wissen, welche Beweise es für (konvexe) Cluster gibt. Meine Daten sind "Transit"

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

Mit der Lückenstatistik suchen Sie nach dem ersten Wert von K, bei dem der Test "fehlschlägt", dh die Lückenstatistik sinkt erheblich. Die obige Schleife gibt eine solche ak aus. Wenn Sie jedoch cgap einfach zeichnen, erhalten Sie die folgende Abbildung:
Geben Sie hier die Bildbeschreibung ein Sehen Sie, wie die Lücke von k = 1 auf k = 2 signifikant abfällt , was bedeutet, dass tatsächlich keine Cluster vorhanden sind (dh 1 Cluster).

Jack
quelle
Wie mache ich dasselbe für hierarchisches Clustering mit Einzelverknüpfung? Können Sie bitte das FUN-Argument von clusGap erklären? Ich habe die folgende Zeile für hierarchisches kmax = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100) ausgeführt. Aber es gibt einen Fehler, der Fehler in FUNcluster (X, kk, ...) sagt: ungültige Clustering-Methode 2
GeorgeOfTheRF
4

Sie können auch eine neuere Methode ausprobieren: A. Kalogeratos und A. Likas, Dip-means: eine inkrementelle Clustering-Methode zur Schätzung der Anzahl der Cluster , NIPS 2012.

Die Idee ist, statistische Hypothesentests auf Unimodalität für Vektoren zu verwenden, die die Ähnlichkeit / Entfernung zwischen einem Punkt und den übrigen Punkten der Menge enthalten. Der Test wird unter Verwendung des Hartigan-Hartigan- Tauchtests Ann durchgeführt. Statist. 13 (1): 70-84.

Die Methode beginnt mit dem gesamten Datensatz als ein Cluster und teilt ihn schrittweise auf, solange die Unimodalitätshypothese verworfen wird (dh mehr als ein Cluster vorhanden ist).

Diese Methode würde also anzeigen, ob die Daten mehr als einen Cluster enthalten (Ihre Frage), kann aber auch das endgültige Clustering bereitstellen.

Hier finden Sie Code in Matlab .

Argyris
quelle
0

Angenommen, ich betrachte das gleiche Beispiel.

Bibliothek (Cluster) cgap <- clusGap (Transit, FUN = kmeans, K.max = kmax, B = 100) für (k in 1: (kmax-1)) {if (cgap Tab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; brechen; }}Tab[k,3]>cgap

Wie kann ich Elemente von Clustern unterteilen, die der besten Clusterlösung basierend auf der Statistik der maximalen Lücke entsprechen? Damit ich es für weitere Analysen auf jedem der Cluster verwenden kann.

Ich weiß, dass es einen Befehl namens Subset gibt. Es gibt keine Probleme mit diesem Befehl, wenn wir die Anzahl der gewünschten Cluster angegeben haben. Aber wie kann man eine Teilmenge erstellen, wenn man eine Teilmenge basierend auf dem optimalen k unter Verwendung der Lücke erhalten möchte (kurz gesagt, Teilmenge von Clustern, wenn es eine Schleife gibt)?

Tharang
quelle