k-means:每次执行都使用相同的集群
Posted
技术标签:
【中文标题】k-means:每次执行都使用相同的集群【英文标题】:k-means: Same clusters for every execution 【发布时间】:2011-11-21 23:54:46 【问题描述】:是否有可能为特定数据集的每次执行获得相同的 kmeans 集群。就像对于随机值一样,我们可以使用固定种子。是否可以阻止随机性进行聚类?
【问题讨论】:
【参考方案1】:是的。在进行聚类之前,使用set.seed
设置随机值的种子。
使用kmeans
中的例子:
set.seed(1)
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")
set.seed(2)
XX <- kmeans(x, 2)
set.seed(2)
YY <- kmeans(x, 2)
相等性测试:
identical(XX, YY)
[1] TRUE
【讨论】:
说明为什么每次都使用set.seed
。这是因为在调用随机数生成函数时,输出取决于.Random.seed
的值,在执行这些函数后会发生变化。参考:r-coder.com/set-seed-r【参考方案2】:
是的,在运行 kmeans(....)
之前立即调用 set.seed(foo)
将给出相同的随机启动,因此每次都具有相同的集群。 foo
是种子,如 42
或其他数值。
【讨论】:
只是添加到 Andrie 和 Gavin 的响应中,我已经测试过,即使我们将 kmeans() 中的nstart
参数设置为大于 1,即具有随机播种的多次迭代,集合。 seed() 将获得可生产的相同结果。以上是关于k-means:每次执行都使用相同的集群的主要内容,如果未能解决你的问题,请参考以下文章