Po wypróbowaniu kilku algorytmów grupowania, uzyskałem najlepszą wydajność w moim zestawie danych przy użyciu flexclust::kcca
z family = kccaFamily("angle")
.Jak generować statystyki wydajności klastrów z Flexclust?
Oto przykład przy użyciu zestawu danych Nclus
z flexclust
.
library(fpc)
library(flexclust)
data(Nclus)
k <- 4
family <- flexclust::kccaFamily("angle")
model <- flexclust::kcca(Nclus, k, family)
Teraz chcę zoptymalizować liczbę klastrów. Najbardziej wszechstronny zestaw wskaźników wydajności dla modeli klastrów wydaje się znajdować pod adresem fpc::cluster.stats
. Ta funkcja wymaga dwóch danych wejściowych: macierzy odległości i przypisanych klastrów.
To ostatnie jest łatwe; to tylko [email protected]
.
Walczę z tym, co zapewnić matrycy odległości. kcca
nie zwraca obiektu odległości (lub jeśli nie, nie znalazłem go).
Domyślam się, że zazwyczaj użyłbym dist(Nclus)
. W tym przypadku nie chcę, aby odległość euklidesowa (lub jakakolwiek inna metoda dostępna do dist
) – Chcę miary odległości używanej przez algorytm grupowania. Mogę odtworzyć macierz odległości używaną przez kcca
przy użyciu kodu z tej funkcji.
control <- as(list(), "flexclustControl")
centers <- flexclust:::initCenters(Nclus, k, family, control)
distmat <- distAngle(Nclus, centers$centers)
Następnie należy po prostu być w stanie obliczyć statystyk modelu klastra za pomocą
fpc::cluster.stats(distmat, [email protected])
Kłopot jest, że daje mi dwa ostrzeżenia o argument na odległość.
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
To sprawia, że podejrzewam, że podaję coś niewłaściwego.
Jak przekazać matrycę odległości do cluster.stats
?
Nawiasem mówiąc, 'fpc :: cluster.stats' wymaga dużej ilości pamięci, więc jest niepraktyczne nawet dla umiarkowanych rozmiarów zestawów danych. Na końcu pojechałem z 'cluster :: silhouette'. –