我已成功使用 Welford 方法计算运行方差和标准差,如 Stack Overflow 和 John D Cook's excellent blog post 中多次描述的那样.
但是在样本流中,有时我会遇到“回滚”或“删除样本”命令,这意味着之前的样本不再有效,应该从计算中删除。我知道要移除的样本的值(value)以及处理时间。但我正在使用 Welford,因为我无法返回再次传递所有数据。
是否有一种算法可以成功地调整我的运行方差以删除或否定之前处理过的特定样本?
最佳答案
给定正向公式
Mk = Mk-1 + (xk – Mk-1) / k
Sk = Sk-1 + (xk – Mk-1) * (xk – Mk),
可以将 Mk-1
求解为 Mk
和 xk
和 k
的函数:
Mk-1 = Mk - (xk - Mk) / (k - 1).
然后我们可以从 Sk
和其余部分直接导出 Sk-1
:
Sk-1 = Sk - (xk – Mk-1) * (xk – Mk).
xk
不一定是这里的最后一个样本;由于 Mk
和 Sk
理论上不依赖于输入的顺序,我们可以假设要删除的样本是最后添加的样本。
我不知道这是否稳定。
关于algorithm - 使用 Welford 方法计算单程方差时删除先验样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876298/