Nachdem ich einige Clusteralgorithmen getestet hatte, erreichte ich die beste Leistung in meinem Datensatz mit flexclust::kcca
mit family = kccaFamily("angle")
.Wie Leistungsstatistikdaten von Flexclust generieren?
Hier ist ein Beispiel mit dem Datensatz Nclus
von flexclust
.
library(fpc)
library(flexclust)
data(Nclus)
k <- 4
family <- flexclust::kccaFamily("angle")
model <- flexclust::kcca(Nclus, k, family)
Jetzt möchte ich die Anzahl der Cluster optimieren. Der umfassendste Satz von Leistungsmetriken für Clustermodelle scheint unter Verwendung von fpc::cluster.stats
gefunden zu werden. Diese Funktion benötigt zwei Eingaben: eine Abstandsmatrix und die zugewiesenen Cluster.
Letzteres ist einfach; Es ist nur [email protected]
.
Ich kämpfe mit, was für die Abstandsmatrix zu sorgen. kcca
gibt kein Entfernungsobjekt zurück (oder wenn es so ist, habe ich es nicht gefunden).
Ich denke, dass ich normalerweise dist(Nclus)
verwenden würde. In diesem Fall möchte ich nicht den euklidischen Abstand (oder eine der anderen verfügbaren Methoden zu dist
) – Ich möchte das Abstandsmaß von dem Cluster-Algorithmus verwendet werden. Ich kann die Distanzmatrix, die von kcca
verwendet wird, mit dem Code aus dieser Funktion neu erstellen.
control <- as(list(), "flexclustControl")
centers <- flexclust:::initCenters(Nclus, k, family, control)
distmat <- distAngle(Nclus, centers$centers)
Dann sollte ich nur in der Lage sein, die Cluster-Modell Statistiken berechnen
fpc::cluster.stats(distmat, [email protected])
Das Problem ist, dass mir zwei Warnungen über die der Abstand Argument gibt.
Warning messages:
1: In as.dist.default(d) : non-square matrix
2: In as.matrix.dist(d) :
number of items to replace is not a multiple of replacement length
Das lässt mich vermuten, dass ich es falsch gebe.
Wie soll ich die Distanzmatrix an cluster.stats
übergeben?
übrigens 'fpc :: cluster.stats' viel Speicher benötigt, so ist es selbst für mäßig große Datensätze unpraktisch. Am Ende ging ich mit cluster :: silhouette. –