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?
答案 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初始化质心,它是随机生成的,需要种子来生成随机值。