如何计算并行应用程序中的全局方差(平方标准差)?

时间:2014-06-23 19:21:23

标签: math variance standard-deviation

我有一个并行应用程序,我在每个节点中根据计算的平均值计算数据点的每个分区的方差,但是如何计算全局方差(所有方差的总和)?

我认为它是方差的简单总和除以节点数,但它没有给我一个接近的结果......

2 个答案:

答案 0 :(得分:4)

全局变体是总和

您可以平行地并行计算和的部分,然后将它们加在一起。

sum(x1...x100) = sum(x1...x50) + sum(x51...x100)

同样,你可以计算全局平均值 - 计算全局和,计算对象计数的总和,除(不除以节点数;但除以对象总数)。

mean = sum/count

一旦得到均值,就可以使用上面的分布式和公式计算偏差平方和(应用于(xi-mean)^ 2),然后除以count-1得到方差。

不要使用E [X ^ 2] - (E [X])^ 2

虽然这个公式“平均值减去平方均值”非常受欢迎,但是当你使用浮点数学时,它在数值上是不稳定的。它被称为catastrophic cancellation。 因为这两个值可能非常接近,所以在计算差异时会丢失很多精度数字。我看到人们以这种方式得到负面差异......

对于“大数据”,数值问题变得更糟......

避免这些问题的两种方法:

  • 使用两遍。计算均值是稳定的,并且可以摆脱正方形的减法。
  • 使用在线算法(例如Knuth和Welford的算法),然后使用加权和来组合每分区均值和方差。 Details on Wikipedia根据我的经验,这通常较慢;但由于启动和IO成本,它可能对Hadoop有益。

答案 1 :(得分:4)

您需要添加每个分区的总和和平方和以获得全局和和平方和,然后使用它们来计算全局均值和方差。

更新:E [X 2 ] - E [X] 2 并取消......

计算用

计算标准差时取消误差的重要性

σ=√(E [X 2 ] - E [X] 2

让我们假设我们有E [X 2 ]和E [X] 2 精确到12个有效小数。这意味着σ 2 具有阶数10 -12 ×E [X 2 ]的误差,或者,如果有显着的抵消,则等效地当σ的误差大约为10 -6 ×E [X]时,10 -12 ×E [X] 2 ;一个百万分之的意思 对于许多(如果不是大多数)统计分析,这是可忽略的,因为它属于其他误差源(如测量误差),因此您可以很好地将负差异设置为零在取平方根之前。

如果你真的关心这种程度的偏差(并且可以证明它是你正在测量的东西的一个特征,而不是,例如,测量方法的神器),那么你可以开始担心取消。也就是说,最可能的解释是您使用了不适当的数据量表,例如以开尔文而不是Celcius测量每日温度!