在线计算均值方差的递推公式(Welford算法)
·
一、通用公式
设当前已有 N 个数据点,当前均值为 mean,新数据点为 new_val,则更新后的均值与方差为:
new_mean=old_mean+new_val−old_meanN+1new\_mean=old\_mean+\frac{new\_val−old\_mean}{N+1}new_mean=old_mean+N+1new_val−old_mean
new_M2n=old_M2n+(new_val−old_mean)∗(new_val−new_mean)new\_M2_n = old\_M2_n + (new\_val−old\_mean) * (new\_val−new\_mean) new_M2n=old_M2n+(new_val−old_mean)∗(new_val−new_mean)
其中:
初始时 N=0,mean 可初始化为 0 或第一个数据点。
每次处理一个新数据点后,N 自增 1。
M2nM2_nM2n 是累计平方差之和
double mean = 0.0;
double M2 = 0.0;
int N = 0;
void update(double x) {
N++;
double delta = x - mean;
mean += delta / N;
double delta2 = x - mean;
M2 += delta * delta2;
}
// 获取样本方差
double getVariance() {
if (N < 2) return 0.0; // 避免除以0
return M2 / (N - 1);
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)