加重平均を計算する反復アルゴリズムを実装したいと考えています。特定の重みの法則は重要ではありませんが、最新の値では 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
2 番目の値 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
値のシーケンスに沿って移動している間、体重プロファイルは私と一緒に移動していることに注意してください。
つまり、各値には常に独自の重みがあるわけではありません。私の目標は、過去に行くときにこの重量を下げることです.