2013-05-13 20 views
1

我做了聚類分析的總和中,我有兩個問題,不同的值:集羣:兩個用於廣場

  1. 我發現了兩個不同的值的平方的總和內的這2種方法:

1 /第一方法這裏成立:http://www.statmethods.net/advstats/cluster.html

set.seed(180) 
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var)) 

for (i in 1:8) 
wss[i] <- sum(kmeans(mydata, 
    centers=i)$withinss) 

wss 
[1] 2244832.0 1707497.8 1514193.9 1131349.7 990028.8 698772.0 683106.4 522783.8 

2 /二法

set.seed(180)  
fit <- kmeans(mydata, 5) 

fit$tot.withinss 
[1] 857443.8 

正如你可以看到990 028!= 857 443,即使我用 「set.seed」

是否有對Statmethods網站的公式中的錯誤呢?

最後,有時wss會隨着簇數增加。是好的還是不可能的?

回答

2

您可以使用set.seed,但在使用第一個示例中的kmeans(data,5)之前,您還會對隨機數生成器做很多工作。您可能會獲得不同的羣集解決方案。如果你只看sum(fit$withinss)它應該匹配fit$tot.withinss爲給定的羣集解決方案。有一些隨機性,雖然如此,如果你想要同樣的東西,你需要確保你正確地設置種子。

+2

我打算說一句:種子只對for循環和第二種方法的第一次迭代是相同的。 – joran 2013-05-13 15:23:02

+0

所以不可能在矢量上使用set.seed?它只會對第一個元素是一樣的嗎? 編輯:謝謝喬蘭 – Ricol 2013-05-13 15:24:43

+0

關於wss的提高,如果種子是相同的,你能證實它是不可能的嗎? – Ricol 2013-05-13 15:26:07

0

通過設置初始值centers,您可以有效地提供手動種子。

k-means僅在最初生成中心時使用隨機種子。

所以實際上,你提供了兩種不同的初始化,因此你不應該感到驚訝得到不同的結果。 K-means只能找到局部最優解。