【问题标题】:R: Clustering results are different everytime I runR:每次运行时聚类结果都不同
【发布时间】:2011-08-07 11:19:11
【问题描述】:
library(amap)
set.seed(5)
Kmeans(mydata, 5, iter.max=500, nstart=1, method="euclidean")

在'amap'包中运行了几次,但即使参数和种子值始终相同,但每次运行Kmeans或其他聚类方法时聚类结果都不一样。

我在不同的包中尝试了另一个 kmeans 函数,但还是一样...

事实上,我想同时使用 Weka 和 R,所以我也尝试了 RWeka 包中的SimpleKMeans,这总是给出相同的值。但是,问题是我不知道如何在 RWeka 中存储来自 SimpleKmeans 的集群数据以及集群编号,所以我被卡住了......

无论如何,我怎样才能保持聚类结果始终相同?或如何将SimpleKmeans 的聚类结果存储到 R 中?

【问题讨论】:

  • 您是在每次运行Kmeans 时重置种子,还是只是第一次?如果你每次都重置种子,你应该每次都得到相同的答案。

标签: r cluster-analysis weka k-means


【解决方案1】:

你一定是做错了什么。只要我在每次调用 Kmeans() 之前设置种子,每次运行以下代码时都会得到可重现的结果:

library(amap)

out <- vector(mode = "list", length = 10)
for(i in seq_along(out)) {
    set.seed(1)
    out[[i]] <- Kmeans(iris[, -5], 3, iter.max=500, nstart=1, method="euclidean")
}

for(i in seq_along(out[-1])) {
    print(all.equal(out[[i]], out[[i+1]]))
}

最后一个 for 循环打印:

[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE

表示每次的结果都完全相同。

【讨论】:

  • 编辑代码示例以包含library(amap) 和函数Kmeans
  • +1 用于展示每次调用 Kmeans 时如何使用 set.seed。
  • @Andrie 感谢编辑将其更新为 Kmeans() 现在 OP 告诉我们在哪里找到它。
【解决方案2】:

提醒一下,K-mean 结果对数据集中数据点的顺序很敏感。如果您再次使用随机数据点运行正确的代码,您将得到不同的结果

【讨论】:

    【解决方案3】:

    你播种了吗? set.seed(1)

    每次K-Means初始化质心时,它都是随机生成的,需要种子来生成随机值。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 2016-10-28
      • 2012-05-02
      • 2016-07-31
      • 2021-08-12
      • 1970-01-01
      • 2017-12-23
      • 2021-03-10
      相关资源
      最近更新 更多