查找数据集的质心

时间:2013-09-10 20:26:02

标签: c++ math dataset cluster-analysis centroid

如果我有一些随机数据集,那就说

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 :(得分:1)

如果你有一个大的数据集,计算一个和除以N不是一个好主意。随着浮点累加器的增长,由于幅度差异,添加新点最终会停止工作。增量公式可能会更好,请参阅:https://math.stackexchange.com/questions/106700/incremental-averageing

如果问题数据集太大,您可以使用带有验证结果的较小数据集来验证代码的基本功能。例如,只有1个数据点或10个数据点。