使用 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
作为 Mk
和 xk
以及 k
的函数:
Mk-1 = Mk - (xk - Mk) / (k - 1).
然后我们可以直接从Sk
导出Sk-1
,其余的:
Sk-1 = Sk - (xk – Mk-1) * (xk – Mk).
xk
不一定是这里的最后一个样本;由于 Mk
和 Sk
理论上不依赖于输入的顺序,我们可以假设要删除的样本是最后添加的样本。
我不知道这是否稳定。
我成功地使用 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
作为 Mk
和 xk
以及 k
的函数:
Mk-1 = Mk - (xk - Mk) / (k - 1).
然后我们可以直接从Sk
导出Sk-1
,其余的:
Sk-1 = Sk - (xk – Mk-1) * (xk – Mk).
xk
不一定是这里的最后一个样本;由于 Mk
和 Sk
理论上不依赖于输入的顺序,我们可以假设要删除的样本是最后添加的样本。
我不知道这是否稳定。