Als Neuling in R bin ich mir nicht sicher, wie ich die beste Anzahl von Clustern für eine k-means-Analyse auswählen soll. Wie viele Cluster sind nach dem Zeichnen einer Teilmenge der folgenden Daten geeignet? Wie kann ich eine Cluster-Dendro-Analyse durchführen?
n = 1000
kk = 10
x1 = runif(kk)
y1 = runif(kk)
z1 = runif(kk)
x4 = sample(x1,length(x1))
y4 = sample(y1,length(y1))
randObs <- function()
{
ix = sample( 1:length(x4), 1 )
iy = sample( 1:length(y4), 1 )
rx = rnorm( 1, x4[ix], runif(1)/8 )
ry = rnorm( 1, y4[ix], runif(1)/8 )
return( c(rx,ry) )
}
x = c()
y = c()
for ( k in 1:n )
{
rPair = randObs()
x = c( x, rPair[1] )
y = c( y, rPair[2] )
}
z <- rnorm(n)
d <- data.frame( x, y, z )
r
cluster-analysis
k-means
user2153893
quelle
quelle
fpc
Paket verfügbaren DBSCAN-Clustering-Algorithmus ausprobieren . Es ist wahr, Sie müssen dann zwei Parameter einstellen ... aber ich habe festgestellt, dass esfpc::dbscan
dann ziemlich gute Arbeit leistet, automatisch eine gute Anzahl von Clustern zu bestimmen. Außerdem kann tatsächlich ein einzelner Cluster ausgegeben werden, wenn die Daten dies aussagen. Einige der Methoden in @ Bens hervorragenden Antworten helfen Ihnen nicht dabei, festzustellen, ob k = 1 tatsächlich am besten ist.Antworten:
Wenn Ihre Frage ist
how can I determine how many clusters are appropriate for a kmeans analysis of my data?
, dann sind hier einige Optionen. Der Wikipedia-Artikel zur Bestimmung der Anzahl von Clustern bietet einen guten Überblick über einige dieser Methoden.Erstens einige reproduzierbare Daten (die Daten im Q sind ... für mich unklar):
Eins . Suchen Sie nach einer Biegung oder einem Ellbogen in der Summe der SSE-Geröllkurven (Squared Error). Weitere Informationen finden Sie unter http://www.statmethods.net/advstats/cluster.html und http://www.mattpeeples.net/kmeans.html . Die Position des Ellbogens in der resultierenden Darstellung legt eine geeignete Anzahl von Clustern für die Kilometer nahe:
Wir könnten daraus schließen, dass 4 Cluster durch diese Methode angezeigt würden:
Zwei . Sie können mithilfe der
pamk
Funktion im fpc-Paket eine Partitionierung um Medoide durchführen, um die Anzahl der Cluster zu schätzen .Drei . Calinsky-Kriterium: Ein weiterer Ansatz zur Diagnose, wie viele Cluster zu den Daten passen. In diesem Fall versuchen wir 1 bis 10 Gruppen.
Vier . Bestimmen Sie das optimale Modell und die Anzahl der Cluster gemäß dem Bayes'schen Informationskriterium für die Erwartungsmaximierung, das durch hierarchisches Clustering für parametrisierte Gaußsche Mischungsmodelle initialisiert wird
Fünf . Affinity Propagation (AP) -Clustering, siehe http://dx.doi.org/10.1126/science.1136800
Sechs . Lückenstatistik zur Schätzung der Anzahl von Clustern. Siehe auch Code für eine schöne grafische Ausgabe . Versuchen Sie hier 2-10 Cluster:
Hier ist die Ausgabe von Edwin Chens Implementierung der Lückenstatistik:
Sieben . Es kann auch nützlich sein, Ihre Daten mit Clustergrammen zu untersuchen, um die Clusterzuweisung zu visualisieren. Siehe http://www.r-statistics.com/2010/06/clustergram-visualization-and-diagnostics-for-cluster-analysis-r- Code / für weitere Details.
Acht . Das NbClust-Paket enthält 30 Indizes, um die Anzahl der Cluster in einem Dataset zu bestimmen.
Wenn Ihre Frage lautet
how can I produce a dendrogram to visualize the results of my cluster analysis
, sollten Sie mit folgenden Punkten beginnen: http://www.statmethods.net/advstats/cluster.html http://www.r-tutor.com/gpu-computing/clustering/hierarchical-cluster-analysis http://gastonsanchez.wordpress.com/2012/10/03/7-ways-to-plot-dendrograms-in-r/ Weitere exotische Methoden finden Sie hier: http://cran.r-project.org/ web / views / Cluster.htmlHier einige Beispiele:
Ebenfalls für hochdimensionale Daten ist die
pvclust
Bibliothek vorgesehen, die p-Werte für hierarchisches Clustering über Multiskalen-Bootstrap-Resampling berechnet. Hier ist das Beispiel aus der Dokumentation (funktioniert nicht mit so niedrigdimensionalen Daten wie in meinem Beispiel):Hilft irgendetwas davon?
quelle
R
Paketen gefunden (es befindet sich auf meinem GitHub - Sie können es sich gerne ansehen). 3) Meine Lösung scheint gut genug zu funktionieren. Außerdem ist es eine Weile her und ich habe meine Dissertationssoftware und meinen Dissertationsbericht (Abschlussarbeit) bereits fertiggestellt und bereite mich derzeit auf die Verteidigung vor :-). Unabhängig davon freue ich mich sehr über Ihren Kommentar und Ihre Links. Alles Gute!Es ist schwer, etwas zu einer so ausführlichen Antwort hinzuzufügen. Obwohl ich
identify
denke, wir sollten dies hier erwähnen , insbesondere weil @Ben viele Dendrogrammbeispiele zeigt.identify
Mit dieser Option können Sie Cluster aus einem Dendrogramm interaktiv auswählen und Ihre Auswahl in einer Liste speichern. Drücken Sie die Esc-Taste, um den interaktiven Modus zu verlassen und zur R-Konsole zurückzukehren. Beachten Sie, dass die Liste die Indizes enthält, nicht die Rownamen (im Gegensatz zucutree
).quelle
Um den optimalen k-Cluster in Clustering-Methoden zu bestimmen. Normalerweise verwende ich eine
Elbow
Methode, die von der Parallelverarbeitung begleitet wird, um Zeitaufwand zu vermeiden. Dieser Code kann wie folgt aussehen:Ellbogenmethode
Ellbogen parallel laufen lassen
Es funktioniert gut.
quelle
Herrliche Antwort von Ben. Ich bin jedoch überrascht, dass hier die Affinity Propagation (AP) -Methode vorgeschlagen wurde, nur um die Anzahl der Cluster für die k-means-Methode zu ermitteln, bei der AP im Allgemeinen die Daten besser gruppiert. Bitte lesen Sie das wissenschaftliche Papier, das diese Methode in Science unterstützt, hier:
Frey, Brendan J. und Delbert Dueck. "Clustering durch Weiterleiten von Nachrichten zwischen Datenpunkten." science 315.5814 (2007): 972 & ndash; 976.
Wenn Sie also nicht auf k-means eingestellt sind, empfehle ich, AP direkt zu verwenden, wodurch die Daten geclustert werden, ohne dass die Anzahl der Cluster bekannt sein muss:
Wenn negative euklidische Abstände nicht angemessen sind, können Sie andere Ähnlichkeitsmaße verwenden, die im selben Paket enthalten sind. Für Ähnlichkeiten, die auf Spearman-Korrelationen basieren, benötigen Sie beispielsweise Folgendes:
Bitte beachten Sie, dass diese Funktionen für Ähnlichkeiten im AP-Paket der Einfachheit halber nur bereitgestellt werden. Tatsächlich akzeptiert die Funktion apcluster () in R jede Korrelationsmatrix. Das gleiche vorher mit corSimMat () kann damit gemacht werden:
oder
abhängig davon, was Sie in Ihrer Matrix gruppieren möchten (Zeilen oder Spalten).
quelle
Diese Methoden sind großartig, aber wenn Sie versuchen, k für viel größere Datensätze zu finden, können diese in R verrückt langsam sein.
Eine gute Lösung, die ich gefunden habe, ist das "RWeka" -Paket, das eine effiziente Implementierung des X-Means-Algorithmus enthält - eine erweiterte Version von K-Means, die besser skaliert und die optimale Anzahl von Clustern für Sie bestimmt.
Zuerst möchten Sie sicherstellen, dass Weka auf Ihrem System installiert ist und XMeans über das Paketmanager-Tool von Weka installiert ist.
quelle
Eine einfache Lösung ist die Bibliothek
factoextra
. Sie können die Clustering-Methode und die Methode zur Berechnung der besten Anzahl von Gruppen ändern. Wenn Sie beispielsweise die beste Anzahl von Clustern für ein k-Mittel wissen möchten:Daten: mtcars
Schließlich erhalten wir eine Grafik wie:
quelle
Die Antworten sind großartig. Wenn Sie einer anderen Clustering-Methode eine Chance geben möchten, können Sie hierarchisches Clustering verwenden und sehen, wie Daten aufgeteilt werden.
Je nachdem, wie viele Klassen Sie benötigen, können Sie Ihr Dendrogramm wie folgt schneiden:
Wenn Sie eingeben
?cutree
, werden die Definitionen angezeigt. Wenn Ihr Datensatz drei Klassen hat, ist es einfachcutree(hc.complete, k = 3)
. Das Äquivalent fürcutree(hc.complete,k = 2)
istcutree(hc.complete,h = 4.9)
.quelle