2017-01-14 52 views
0

我試圖在R Studio的平方和之間爲我自己的k-means實現編寫我自己的函數,用於平方和的總和。計算方格不一致的總數

我已經成功地寫出了平方和之內的函數,但是我的平方和(因此bss)的總和有困難。我得到的結果明顯大於R自己的kmeans函數計算的結果。我很困惑,因爲我完全遵循公式提供的內容。這裏是我的數據:

A = 

36  3 
73  3 
30  3 
49  3 
47 11 
47 11 
0  7 
46  5 
16  3 
52  4 
0  8 
21  3 
0  4 
57  6 
31  5 
0  6 
40  3 
31  5 
38  4 
0  5 
59  4 
61  6 
48  7 
29  2 
0  4 
19  4 
19  3 
48  9 
48  4 
21  5 

其中每列是一個功能。這是我迄今創建的用於tss的功能:

tot_sumoSq <- function(data){ 

    avg = mean(as.matrix(data)) 
    r = matrix(avg, nrow(data), ncol(data)) 

    tot_sumoSq = sum((data - r)^2) 

} 

我收到結果24342.4,但R給出13244.8。我完全錯過了什麼嗎?

回答

0

後面的值是使用列平均值計算的。如果你用這個來計算平均值,你會得到相同的答案。

avg = colMeans(data) 
    r = matrix(avg, nrow(data), ncol(data), byrow=T) 
[1] 13244.8 
+0

謝謝。這澄清了很多。 – user1723196

0

可能是你的程序有問題。你從數據框中減去一個矩陣。使用以下內容 -

tot_sumoSq <- function(data){ 
    data = as.matrix(data) 
    x = sum((data - mean(data))^2) 
    return(x) 
} 

從我這邊看,它給出了正確的答案。

+0

謝謝。這並沒有解決我的問題,但它確實幫助我找到解決方案! – user1723196

0

我通過結合前兩位評論員提供的解決方案找到了解決我的問題的方案。我明白我以前的錯誤是什麼,並希望爲未來的科學家解決任何困惑。每個列是不同特徵的整個樣本,所以當我們計算每列的平均值時,它是一個特徵的整個樣本均值的平均值。我之前的概念錯誤是將兩個特徵結合起來計算總體平均值。