2013-09-10 37 views
0

的心如果我有一些隨機的數據集,讓我們說查找數據集

X  Y 
1.2  16 
5.7  0.256 
128.54 6.879 
0  2.87 
6.78 0 
2.98 3.7 
...  ... 
x'  y' 

我如何才能找到這個數據集的質心座標?

p.s.這裏是我的嘗試,但得到錯誤的結果

float Dim1[K]; 
float Dim2[K]; 
float centroidD1[K]; 
float centroidD2[K]; 

int K = 4; 
int counter[K]; 
for(int i = 0; i < K ; i++) 
{ 
    Dim1[i] = 0; 
    Dim2[i] = 0; 
    counter[i] = 0; 
    for(int j = 0; j < hash["Cluster"].size(); j++) 
    { 
     if(hash["Cluster"].value(j) == i+1) 
     { 
      Dim1[i] += hash["Dim_1"].value(j); 
      Dim2[i] += hash["Dim_2"].value(j); 
      counter[i]++; 
     } 
    } 
} 

for(int l = 0; l < K; l++) 
{ 
    centroidD1[l] = Dim1[l]/counter[l]; 
    centroidD2[l] = Dim2[l]/counter[l]; 
} 

我猜我選錯算法做它,因爲我得到錯誤的結果。

+1

添加所有數字併除以元素數量? –

+0

@Kerrek SB請參閱更新後的文章 – Mike

+0

您的程序輸出了什麼以及期望的結果是什麼? – Renan

回答

0

如果你有一個大的數據集,計算總和除以N不是一個好主意。隨着浮點累加器的增加,由於幅度的差異,添加新的點最終會停止工作。增量公式可能更好,請參閱:https://math.stackexchange.com/questions/106700/incremental-averageing

如果問題太大,可以通過使用帶有手驗證結果的較小數據集來驗證代碼的基本功能。例如,只有1個數據點或10個數據點。