Prächtige Antwort von Ben. Ich bin jedoch überrascht, dass die Affinity Propagation (AP)-Methode hier vorgeschlagen wurde, um nur die Anzahl der Cluster für die k-Means-Methode zu finden, während AP im Allgemeinen eine bessere Arbeit beim Clustern der Daten leistet. Bitte sehen Sie das wissenschaftliche Papier, das diese Methode in Science unterstützt, hier:
Frey, Brendan J., und Delbert Dueck. "Clustering durch Weitergabe von Nachrichten zwischen Datenpunkten." Wissenschaft 315.5814 (2007): 972-976.
Also, wenn Sie nicht voreingenommen gegen k-Means sind, empfehle ich, AP direkt zu verwenden, das die Daten clustert, ohne die Anzahl der Cluster zu kennen:
library(apcluster)
apclus = apcluster(negDistMat(r=2), data)
show(apclus)
Wenn negative euklidische Abstände nicht geeignet sind, können Sie andere Ähnlichkeitsmaße verwenden, die im selben Paket bereitgestellt werden. Zum Beispiel benötigen Sie für Ähnlichkeiten basierend auf Spearman-Korrelationen dies:
sim = corSimMat(data, method="spearman")
apclus = apcluster(s=sim)
Bitte beachten Sie, dass diese Funktionen für Ähnlichkeiten im AP-Paket nur zur Vereinfachung bereitgestellt werden. Tatsächlich akzeptiert die Funktion apcluster() in R jede Matrix von Korrelationen. Das Gleiche wie zuvor mit corSimMat() kann mit diesem gemacht werden:
sim = cor(data, method="spearman")
oder
sim = cor(t(data), method="spearman")
abhängig davon, was Sie in Ihrer Matrix clustern möchten (Zeilen oder Spalten).