K均值对相同数据进行10次迭代

问题描述 投票:0回答:1

我对R较新。尝试通过针对相同的数据集和相同的K值重复调用k-means例程来评估是否可以通过使用R来获得K-means的优化(即我的情况下k = 3 )的10/15倍,看看是否能给我带来良好的效果。我看到每次调用时群集都会发生变化,即使平方和之和的总和也开始发生变化,但不确定如何在最佳情况下停止运行。

有人可以引导我吗?

代码:

run_kmeans <- function(xtimes)
{

  for (x in 1:xtimes) 
    {
    kmeans_results <- kmeans(filtered_data, 3) 
    print(kmeans_results["totss"]) 
    print(kmeans_results["tot.withinss"])
  }   
  return(kmeans_results)
}
kmeans_results = run_kmeans(10)
r machine-learning data-mining k-means
1个回答
0
投票

不确定我是否理解您的问题,因为这不是选择最佳分区的常用方法(弯头方法,轮廓方法等)

假设您要找到kmeans分区,以最小化群集内平方和。

?kmeans中的示例为例>

x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")

您可以编写它来重复运行kmeans:

xtimes <- 10
kmeans <- lapply(seq_len(xtimes), function(i){
  kmeans_results <- kmeans(x, 3)
})

lapply总是比for更可取。您输出一个列表。要提取内容并查看哪一个最小:

perf <- sapply(kmeans, function(d) as.numeric(d["tot.withinss"]))
which.min(perf)

但是,除非我误解了您的目标,否则这是选择性能最高的分区的奇怪方法。通常,这是要评估的簇数;使用相同的样本数据和相同数量的聚类产生的partititon没有差异。

编辑您的评论

确定,因此您希望找到可以提供最佳性能的列组合。我在下面给出一个示例,其中每三个两个变量的两个两个组合进行测试。您可以概括一下(但是可以使用8个变量的组合数量非常大,您应该有一个例程来减少测试组合的数量)

x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 3),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 3)
)
colnames(x) <- c("x", "y","z")

combinations <- combn(colnames(x), 2, simplify = FALSE)
kmeans <- lapply(combinations, function(i){
  kmeans_results <- kmeans(x[,i], 3)
})

perf <- sapply(kmeans, function(d) as.numeric(d["tot.withinss"]))
which.min(perf)
© www.soinside.com 2019 - 2024. All rights reserved.