gpt4 book ai didi

c++ - 查找数据集的质心

转载 作者:行者123 更新时间:2023-11-28 07:26:07 25 4
gpt4 key购买 nike

假设我有一些随机数据集

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'

如何找到这个数据集的质心坐标?

附注这是我尝试但得到错误结果的方法

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];
}

我想我选择了错误的算法,因为我得到了错误的结果。

最佳答案

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

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

关于c++ - 查找数据集的质心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com