【问题标题】:Kmodes cluster size change quite on each runKmodes 集群大小在每次运行时变化很大
【发布时间】:2017-10-29 13:07:11
【问题描述】:

我在 r 中使用 kmodes 聚类。每次我运行下面的代码时,即使在设置种子之后,我也会得到不同的集群大小

set.seed(11) 
c1 = kmodes(data, 3, iter.max = 1000, weighted = FALSE)

我正在寻找即使在再次运行相同的代码后也不会改变的输出。我知道 kmodes 使用与 Kmeans 相同的技术来处理初始随机点。如果我们设置种子,那么 Kmeans 会给出相同的集群大小输出但不适用于 Kmodes..

谢谢

拉胡尔

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    使用这个简单的代码,我们可以调查kmodes 给出的结果是否可以使用set.seed 重现:

    library(klaR)
    set.seed(1)
    x <- rbind(matrix(rbinom(250, 2, 0.25), ncol = 5),
               matrix(rbinom(250, 2, 0.75), ncol = 5))
    colnames(x) <- c("a", "b", "c", "d", "e")
    
    nreps <- 10
    mtx <- matrix(0, nrow(x), nreps)
    for (k in 1:nreps) {
      set.seed(123)
      mtx[, k] <- kmodes(x, 3, iter.max = 1000, weighted = FALSE)$cluster
    }
    

    kmodes 的输出在 nreps 运行中不会改变

    apply(mtx,2,function(x) all(x==mtx[,1]))
    
    [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
    

    【讨论】:

    • “通过例子证明”从来都不是一个好主意......不要这样做。也许您的数据集太简单了,所以它总是会找到相同的最小值?您可能需要更硬的数据集(而不是数字数据集?)...
    • @Anony-Mousse 在发布此示例之前,我仔细检查了kmodes 中的代码,并没有找到任何结果不可重现的原因。算法中唯一的随机元素似乎是sample 命令:modes &lt;- unique(data)[sample(nrow(unique(data)))[1:k]。这就是我发布此示例的原因。
    • 谢谢,这是一个很大的帮助...我猜问题出在我的 R 上。在设置种子之后,我用不同的迭代获得不同的输出,但其他系统中的相同代码获得相同的编号。输出集群..不知道为什么...
    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2015-11-21
    • 2021-10-20
    • 1970-01-01
    • 2016-06-28
    • 2017-12-23
    相关资源
    最近更新 更多