3

我将此作为在线计算可变长度数据数组的方差和均值的参考:http: //www.johndcook.com/standard_deviation.html

数据是一组 16 位无符号值,可以有任意数量的样本(实际上,最小值约为 20 个样本,最大值约为 2e32 个样本。

由于数据集可能太大而无法存储,我已经使用上面提到的 C 在线算法实现了这一点,并验证了它的计算是否正确。

问题始于对应用程序的以下要求:除了计算整个集合的方差和均值外,我还需要计算由中间 50% 值组成的总体的分离结果(均值和方差),即忽略前 25% 和后 25% 的样本。事先不知道样本的数量,所以我必须在线计算附加集。

我知道我可以通过单独计算来添加和减去一个子集,并且它们使用类似于此处描述的 operator+ 实现:http: //www.johndcook.com/skewness_kurtosis.html(减去偏度和峰度细节,为此我没有用)。减法可以由此得出。

问题是:我如何维护这些子集?还是我应该尝试另一种技术?

4

1 回答 1

2

如果空间是一个问题,并且您很乐意接受近似值,我将从以下论文中的算法开始:

M Greenwald,S Khanna,分位数摘要的空间高效在线计算

您可以使用该算法计算到目前为止所见观察值的第 25 和第 75 个百分位数的运行估计值。然后,您可以将落在两个百分位数之间的观察结果输入 John D Cook 的文章中介绍的 Welford 算法,以计算运行均值和方差。

于 2014-07-28T20:38:38.793 回答