【问题标题】:EM clustering instead of KmeansEM 聚类而不是 Kmeans
【发布时间】:2018-12-13 03:21:40
【问题描述】:

我有以下脚本,可用于使用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")

【问题讨论】:

  • 什么是 EM 聚类技术?你有那个方法的参考吗? EM 是最大化可能性的一般方法,您要建模的可能性是什么?此外,在寻求帮助时,您应该在reproducible example 中包含我们可用于测试的示例输入数据。
  • @MrFlick, EM:期望最大化。 “Arthur P Dempster、Nan M Laird 和 Donald B Rubin。通过 em 算法从不完整数据中获得最大似然性。皇家统计学会杂志。B 系列(方法学),1-38,1977。”

标签: r cluster-computing k-means


【解决方案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")

【讨论】:

  • 感谢您的回答,我的主要问题是如何将 EM 聚类与 Elbow 技术结合使用?
  • @EsterSilva - 虽然可以从您的代码中推断出该要求,但您的问题中并未明确说明。此外,“肘部技术”是一种不准确的描述,因为肘部技术可以并且与任何选择的度量一起使用。它不仅在您的示例中用于 wss 。我已经相应地更新了我的帖子,并举例说明了如何满足您的要求。
猜你喜欢
  • 2014-12-27
  • 2013-11-18
  • 1970-01-01
  • 2015-02-20
  • 2017-06-08
  • 2011-01-28
  • 2019-02-14
  • 2015-11-20
  • 2016-02-02
相关资源
最近更新 更多