2015-11-17 30 views
-1

我正在學習R,在做K均值聚類的同時,我多次發現了下面的函數,以便從scree圖確定最佳K值。 現在,我明白了這個函數背後的邏輯,但是我很難理解R函數,有人可以解釋一下。用K確定K值的Scree圖

wssplot <- function(data, nc=15, seed=1234) 
    { 
    wss <- (nrow(data)-1)*sum(apply(data,2,var)) 
    for (i in 2:nc) 
    { 
     set.seed(seed) 
     wss[i] <- sum(kmeans(data, centers=i)$withinss) 
    } 
    plot(1:nc, wss, type="b", xlab="Number of Clusters", 
    ylab="Within groups sum of squares") 
} 
+2

你不明白? –

+0

要避免編輯標題:[scree plot](http://support.minitab.com/en-us/minitab/17/topic-library/modeling-statistics/multivariate/principal-components-and-factor-analysis/what-is-scree-plot /) –

+0

我不明白'wss < - (nrow(data)-1)* sum(apply(data,2,var))'的需要和作用。 –

回答

0

該函數運行kmeansnc-1倍,並發現平方和,它概括了的矢量。這是每個迭代的結果,它們依次繪製在一個圖上,其中x軸表示聚類數量,y軸表示平方和的總和。

+0

感謝@羅曼,所以我所理解的是它在wss中創建了一個'在平方和之內'的矢量,然後將它與2到15的羣集數進行比較。我不明白'wss < - (nrow(data)-1)* sum(apply(data,2,var))'。我從函數中刪除它,仍然得到相同的情節。 –

+0

'wss'是長度爲1的矢量,並被循環覆蓋(並拉長)。這可能是來自函數以前版本的基本變量,或者是在函數寫入過程中一直存在的內容。或者是初始化循環寫入所需的對象的一種非常麻煩的方式。您可以用'wss < - rep(NA,length(2:nc))'替換它。 –

+0

謝謝!這正是我的想法 –