利用递推快速计算方差和均值

时间:2022-05-31 00:36:04

问题来源:算法第四版习题1.2.18,累加器的方差里用递推来计算平均值和方差:

public class Accumulator  
{
private double m;
private double s;
private int N;
public void addDateValue(double x)
{
N++;
s=s+1.0*(N-1)/N*(x-m)*(x-m);
m=m+(x-m)/N;
}
public double mean()
{
return m;
}
public double var()
{
return s/(N-1);
}
public double stddev()
{
return Math.sqrt(this.var());
}
}
均值的更新很好理解,那么方差的更新是怎么做到的呢?

公式推导:

均值定义:

利用递推快速计算方差和均值

方差定义:

利用递推快速计算方差和均值

均值的递推:

利用递推快速计算方差和均值

方差的推导:

利用递推快速计算方差和均值

利用递推快速计算方差和均值

其中利用递推快速计算方差和均值

这样递推的好处:

1.实时更新数据;2.减小运算量;3.更好的避免四舍五入带来的误差。