EM кластеризация вместо Kmeans - PullRequest
0 голосов
/ 04 июля 2018

У меня есть следующий скрипт, который я могу использовать, чтобы найти лучший номер кластера, используя kmeans. Как изменить следующий скрипт, используя технику кластеризации EM вместо kmeans.

Воспроизводимый пример:

ourdata<- scale(USArrests)

Цените!

wss <- (nrow(ourdata)-1)*sum(apply(ourdata,2,var))
for (i in 2:10) wss[i] <- sum(kmeans(ourdata, 
                                      centers=i)$withinss)

plot(1:10, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares")

1 Ответ

0 голосов
/ 05 июля 2018

Пакет EMCluster предлагает множество функций для запуска кластеризации на основе моделей EM. Пример поиска решения с k = 3 кластерами:

Обновление за комментарий ОП:

Вы можете вычислить в пределах суммы квадратов вместе с другими интересующими метриками, используя fpc::cluster.stats(). Они могут быть извлечены и нанесены на карту как ваш оригинальный пост. Напомним, что «метод локтя», как вы описали, является неточным описанием, потому что метод локтя является общей техникой и может использоваться для любой метрики по выбору. Он используется не только для сумм квадратов, как в оригинальном сообщении.

library(EMCluster)
library(fpc)

ourdata<- scale(USArrests)
dist_fit <- dist(ourdata)

num_clusters <- 2:4

set.seed(1)
wss <- vapply(num_clusters, function(i_k) {
  em_fit <- em.EM(ourdata, nclass = i_k, lab = NULL, EMC = .EMC,
                  stable.solution = TRUE, min.n = NULL, min.n.iter = 10)
  cluster_stats_fit <- fpc::cluster.stats(dist_fit, em_fit$class)
  cluster_stats_fit$within.cluster.ss
}, numeric(1))

plot(num_clusters, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares")
...