使用 Welford 方法计算单通道方差时删除先前样本

Mon*_*ace 6 algorithm math statistics variance standard-deviation

我成功地使用 Welford 的方法来计算运行方差和标准差,正如 Stack Overflow 和John D Cook 的优秀博客文章中多次描述的那样。

然而,在样本流中,有时我会遇到“回滚”或“删除样本”命令,这意味着先前的样本不再有效,应从计算中删除。我知道要移除的样本的价值以及处理时间。但我正在使用 Welford,因为我无法返回再次遍历所有数据。

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

Dav*_*tat 5

给定前向公式

\n\n
Mk = Mk-1 + (xk \xe2\x80\x93 Mk-1) / k\nSk = Sk-1 + (xk \xe2\x80\x93 Mk-1) * (xk \xe2\x80\x93 Mk),\n
Run Code Online (Sandbox Code Playgroud)\n\n

可以将 求解为和的Mk-1函数Mkxkk

\n\n
Mk-1 = Mk - (xk - Mk) / (k - 1).\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么我们可以Sk-1直接得出Sk其余部分:

\n\n
Sk-1 = Sk - (xk \xe2\x80\x93 Mk-1) * (xk \xe2\x80\x93 Mk).\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

我不知道这是否稳定。

\n