使用 Welford 方法计算单程方差时删除先验样本

Removing a prior sample while using Welford's method for computing single pass variance

我成功地使用 Welford 的方法来计算 运行 方差和标准差,正如在 Stack Overflow 和 John D Cook's excellent blog post.

上多次描述的那样

然而在样本流中,有时我会遇到 "rollback" 或 "remove sample" 顺序,这意味着之前的样本不再有效,应该从计算中删除。我知道要移除的样本的价值以及处理时间。但我正在使用 Welford,因为我无法返回再次传递所有数据。

是否有算法可以成功调整我的 运行 方差以删除或否定之前处理过的特定样本?

给定正向公式

Mk = Mk-1 + (xk – Mk-1) / k
Sk = Sk-1 + (xk – Mk-1) * (xk – Mk),

可以求解 Mk-1 作为 Mkxk 以及 k 的函数:

Mk-1 = Mk - (xk - Mk) / (k - 1).

然后我们可以直接从Sk导出Sk-1,其余的:

Sk-1 = Sk - (xk – Mk-1) * (xk – Mk).

xk不一定是这里的最后一个样本;由于 MkSk 理论上不依赖于输入的顺序,我们可以假设要删除的样本是最后添加的样本。

我不知道这是否稳定。