4
library(amap)
set.seed(5)
Kmeans(mydata, 5, iter.max=500, nstart=1, method="euclidean")

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

我在不同的包中尝试了另一个 kmeans 函数,但仍然相同......

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

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

4

3 回答 3

9

你一定做错了什么。每次运行以下代码时,我都会得到可重现的结果,只要我在每次调用之前设置种子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

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

于 2011-04-17T21:26:50.687 回答
4

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

于 2012-01-31T16:14:01.850 回答
3

你种下种子了吗? set.seed(1)

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

于 2015-07-27T09:30:50.967 回答