R:每次运行时,聚类结果都是不同的

R:每次运行时,聚类结果都是不同的,r,cluster-analysis,weka,k-means,R,Cluster Analysis,Weka,K Means,在“amap”包中运行多次,但即使参数和种子值始终相同,每次运行Kmeans或其他群集方法时,群集结果都是不同的 我在不同的包中尝试了另一个kmeans函数,但仍然是一样的 事实上,我想同时使用Weka和R,所以我也尝试在RWeka包中使用SimpleKMeans,这总是给出相同的值。然而,问题是,我不知道如何存储集群数据以及来自RWeka中SimpleKmeans的集群编号,所以我被困在 无论如何,我怎样才能保持聚类结果始终不变?或者如何将SimpleKmeans的聚类结果存储到R中?您一定做

在“amap”包中运行多次,但即使参数和种子值始终相同,每次运行Kmeans或其他群集方法时,群集结果都是不同的

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

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


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

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


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

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

设置种子了吗?
set.seed(1)


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

您是在每次运行
Kmeans
时重置种子,还是第一次重置种子?如果每次重置seed,每次都应该得到相同的答案。编辑代码示例,包括
library(amap)
和函数
Kmeans
+1,用于显示每次调用Kmeans时应如何使用set.seed。@感谢编辑将其更新为
Kmeans()
,现在OP告诉我们在哪里可以找到它。
library(amap)
set.seed(5)
Kmeans(mydata, 5, iter.max=500, nstart=1, method="euclidean")
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]]))
}
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE