首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对相同数据迭代10次。

对相同数据迭代10次。
EN

Stack Overflow用户
提问于 2020-03-29 12:55:23
回答 1查看 93关注 0票数 0

对于R来说,我是一个新鲜的人,试图通过迭代调用相同数据集的k-均值例程和10/15倍的K值(我的情况下是k=3 ),来评估我是否能够得到K-均值的优化(使用R),看看是否能给出好的结果。在每次调用时,我都会看到集群的变化,即使是平方和也开始发生变化,但我不知道如何在最佳情况下停止。

有人能指引我吗?

代码:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-29 13:47:12

我不确定我是否理解你的问题,因为这不是选择最佳分割的通常方法(肘法、剪影法等)。

假设您想要找到最小化群内平方和的kmeans分区。

让我们以?kmeans为例

代码语言:javascript
运行
复制
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")

您可以编写它来重复运行,这意味着:

代码语言:javascript
运行
复制
xtimes <- 10
kmeans <- lapply(seq_len(xtimes), function(i){
  kmeans_results <- kmeans(x, 3)
})

lapply总是比for更好。你输出了一个列表。提取和看哪一个是最小的:

代码语言:javascript
运行
复制
perf <- sapply(kmeans, function(d) as.numeric(d["tot.withinss"]))
which.min(perf)

但是,除非我误解了您的目标,否则这是选择性能最好的分区的一种奇怪方法。通常,这是被评估的集群的数量;而不是用相同的样本数据和相同的集群数产生的不同的部分。

从您的评论编辑

好的,那么您想要找到给您提供最佳性能的列的组合。下面我给你一个例子,每两个组合的三个变量被测试。您可以泛化一点(但是有8个变量的组合数量非常多,您应该有一个例程来减少测试组合的数量)。

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60914599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档