2011-04-17 24 views
2
library(amap) 
set.seed(5) 
Kmeans(mydata, 5, iter.max=500, nstart=1, method="euclidean") 

和運行幾次,但即使參數和種子值始終是相同的,聚類結果每次運行K均值時間是不同的,或其他集羣方法。R:聚類結果是不同的,每次我在「A-MAP」包運行

我嘗試不同的封裝另一個K均值功能,但還是一樣......

其實,我想使用的Weka和R在一起,所以我在RWeka包也試過SimpleKMeans,這給一直相同的價值。但是,問題是,我不知道如何將聚集的數據以及來自SimpleKmeans的簇號碼存儲在RWeka中,所以我被卡住了...

無論如何,我如何保持聚類結果始終相同?或者如何將SimpleKmeans的聚類結果存儲到R中?

+2

你是在每次運行Kmeans時重新設置種子,還是第一次?如果每次都重置種子,則每次都應該得到相同的答案。 – Greg 2011-04-17 22:11:13

回答

7

你一定在做錯事。我得到可重複的結果每個I運行下面的代碼時,只要我把每次調用前種子Kmeans()

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]])) 
} 

最後一個for循環打印:

[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 
[1] TRUE 

指示的結果是完全每次都一樣。

+1

編輯的代碼示例包含'library(amap)'和函數'Kmeans' – Andrie 2011-04-18 07:07:58

+0

+1顯示每次調用Kmeans時應如何使用set.seed。 – Andrie 2011-04-18 07:08:36

+0

@Andrie感謝編輯將它更新爲'Kmeans()',現在OP告訴我們在哪裏找到了。 – 2011-04-18 07:11:46

3

只需提醒一下,K均值結果對數據集中數據點的順序非常敏感。如果您再次運行帶有隨機數據點的正確代碼,您將得到不同的結果

2

您是否設置了種子? set.seed(1)

每次K-Means都會初始化質心,它是隨機生成的,它需要種子來生成隨機值。

相關問題