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:每次执行都使用相同的集群的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scikit-learn 获取每个 k-means 集群的惯性值?

重复运行该程序的不同 k-means 结果

K-means聚类算法原理与实现

如何在k-means中记录每次迭代的质心?

K-means 与KNN 聚类算法

聚类的重要性是啥?