Algorithm 在不存储操作的情况下计算一定数量操作的速率或百分比

Algorithm 在不存储操作的情况下计算一定数量操作的速率或百分比,algorithm,Algorithm,假设我有两种类型的操作可以由用户a和B执行。我需要计算代表用户a或B执行的最后100个操作的百分比/比率。 我认为没有必要存储所有动作来计算,例如: lastActions = [ A, A, A, B, B, A, B, A, A, A, A, B, A, B ...]; 当新操作到达时,删除第一个位置的项,同时在最后一个位置添加新项。 我可以工作,但我相信有一个更好的解决方案来计算,我不需要行动的顺序或时间表,只需要行动占总数的百分比(过去100)。如果你需要确切的比例,那么就不需要存储行

假设我有两种类型的操作可以由用户a和B执行。我需要计算代表用户a或B执行的最后100个操作的百分比/比率。 我认为没有必要存储所有动作来计算,例如:

lastActions = [ A, A, A, B, B, A, B, A, A, A, A, B, A, B ...];
当新操作到达时,删除第一个位置的项,同时在最后一个位置添加新项。
我可以工作,但我相信有一个更好的解决方案来计算,我不需要行动的顺序或时间表,只需要行动占总数的百分比(过去100)。

如果你需要确切的比例,那么就不需要存储行动,以便你准确地知道何时忘记它们

如果近似答案足够好,那么可以使用简单的指数加权移动平均值。为此,请使用以下内容进行更新:

 weighted_average = 0.99 * weighted_average + 0.01 * observation
实际上,它的重量只有前100个的63.39%,下一个的23.205%,下一个的8.49%,依此类推

一般来说,如果你想要的东西看起来有点像过去
n
样本的平均值,你会分别使用
(1-1/n)
(1/n)
来代替
0.99
0.01

这个平均值将以一个偏差开始,需要几百次观察才能消失。有几种方法可以纠正这一点。最简单的方法是计算观察值,然后:

w = max(1/observations, 1/n)
weighted_average = (1 - 1/w) * weighted_average + (1/w) * observation
这将计算第一次
n次
的所有观测值的精确平均值,然后切换到指数加权


这项技术广泛应用于Unix负载平均值、更新神经网络和跟踪华尔街的各种财务指标等领域。

如果您需要准确的比例,则无需存储操作,以便您准确地知道何时忘记它们

如果近似答案足够好,那么可以使用简单的指数加权移动平均值。为此,请使用以下内容进行更新:

 weighted_average = 0.99 * weighted_average + 0.01 * observation
实际上,它的重量只有前100个的63.39%,下一个的23.205%,下一个的8.49%,依此类推

一般来说,如果你想要的东西看起来有点像过去
n
样本的平均值,你会分别使用
(1-1/n)
(1/n)
来代替
0.99
0.01

这个平均值将以一个偏差开始,需要几百次观察才能消失。有几种方法可以纠正这一点。最简单的方法是计算观察值,然后:

w = max(1/observations, 1/n)
weighted_average = (1 - 1/w) * weighted_average + (1/w) * observation
这将计算第一次
n次
的所有观测值的精确平均值,然后切换到指数加权


这项技术广泛应用于Unix负载平均值、更新神经网络和跟踪华尔街的各种财务指标等领域。

看起来不错,我将对此进行一些实际实验,并提供反馈。谢谢,我对你暴露的变量感到困惑。“观察值”、“观察值”和“n”到底是什么?
观察值
是指您进行了多少次观察<代码>观察值是当前值,例如a为1,b为0
n
是您希望平均超过的数量,在您的案例中为100。看起来不错,我将对此进行一些实际实验,并提供反馈。谢谢,我对你暴露的变量感到困惑。“观察值”、“观察值”和“n”到底是什么?
观察值
是指您进行了多少次观察<代码>观察值是当前值,例如a为1,b为0
n
是您希望平均超过的数量,在您的案例中为100。