我想实现一个迭代算法,它计算加权平均值。具体的权重法则无关紧要,但对于最新的值应该接近 1,对于最旧的值应该接近 0。
该算法应该是迭代的。即它不应该记住所有以前的值。它应该只知道一个最新的值和任何关于过去的聚合信息,比如以前的平均值、总和、计数等。
可能吗?
例如,以下算法可以是:
void iterate(double value) {
sum *= 0.99;
sum += value;
count++;
avg = sum / count;
}
它会给出指数递减的权重,这可能不好。是否可以逐步减轻体重或其他什么?
编辑 1
称重法的要求如下:
1)重量减少到过去 2)我有一些平均或特征持续时间,因此这个持续时间较旧的值比新的值要小得多 3)我应该能够设置这个持续时间
编辑 2
我需要以下内容。假设v_i
是值,v_1
第一个在哪里。还假设w_i
是权重。但是w_0
是最后一个。
所以,在第一个值出现之后,我有了第一个平均值
a_1 = v_1 * w_0
在第二个值 v_2 来之后,我应该有平均值
a_2 = v_1 * w_1 + v_2 * w_0
有了下一个值,我应该有
a_3 = v_1 * w_2 + v_2 * w_1 + v_3 * w_0
请注意,体重曲线与我一起移动,而我正在沿着价值序列移动。
即每个值都不是一直都有自己的权重。我的目标是在过去时降低体重。