我有一些人们对事物进行投票的数据,如果对每个项目进行平均投票,那将是很好的选择。您可以将投票视为不断传入的数字流。现在我可以准确地计算出平均值,但要做到这一点,我必须存储两个数字,要么是总数,要么是当前平均值,以及到目前为止已经看到的项目数。如果我这样做,我可以使用
AVG[n+1] = (AVG[n]*count + item)/(count+1)
但这很痛苦,因为它迫使我为每个我想要投票的项目存储两条数据。我知道还有另一种方法称为移动平均值或迭代器平均值,它可以处理流数据,但只会给出一个近似平均值,如下所示:
AVG[n+1] = alpha*(item - AVG[n]) + AVG[n]
其中 alpha 是一些小的固定学习率。这只是试图将新平均值向新项目的方向移动,并按与该新项目与当前估计值之间的差异成比例的量移动。这给了我一种方法,只需要存储一个数字(当前平均值)并且当有新项目进入时仍然能够更新它,但代价是这只是一个近似值。
我想知道这种方法引入的错误是否有任何已知的界限......是否有一个公式来估计这个估计与事实的差距,以及我应该如何选择一个好的阿尔法?有关此帖子和此问题的更多信息。