EM集群而不是Kmeans

时间:2018-07-04 16:25:01

标签: r cluster-computing k-means

我有以下脚本,可用于使用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 :(得分:1)

EMCluster软件包提供了用于运行基于EM模型的集群的各种功能。查找具有k = 3个簇的解决方案的示例:

根据OP的评论进行更新:

您可以使用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")