2017-05-29 32 views
0

我在r中使用kmodes集羣。每次我運行下面的代碼,我得到不同的簇大小我找,即使再次乳寧同樣代碼後不改變輸出,即使設立種子Kmodes集羣大小在每次運行時相當變化

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

後..我明白kmodes使用安靜的相同的技術K均值爲初始隨機點..如果我們設置種子然後K均值給予相同的簇大小輸出,但不Kmodes ..

感謝

拉胡爾

回答

-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 
+0

改變「證明由例如」從來就不是一個好主意......不這樣做。也許你的數據集太簡單了,所以它總會找到相同的最小值?您可能需要更難的數據集(而不是數字數據集?)... –

+0

@ Anony-Mousse在發佈此示例之前,我仔細檢查了'kmodes'內的代碼,並且沒有發現導致結果不可重複的任何原因。算法中唯一的隨機性元素似乎是'sample'命令:'modes < - unique(data)[sample(nrow(unique(data)))[1:k]'。這就是我發佈這個例子的原因。 –

+0

謝謝這是一個很好的幫助...問題出現在我的R我猜。因爲在設置種子後,我用不同的迭代獲得不同的輸出,但其他系統中的相同代碼gettin同樣不。輸出集羣..不知道爲什麼... – user3454746

相關問題