R:每次运行时,群集结果都不同

时间:2011-04-17 20:55:23

标签: r cluster-analysis weka k-means

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?

3 个答案:

答案 0 :(得分:8)

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

每次指示结果完全相同。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

你有种子吗? set.seed(1)

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