Ziv Log A personal notebook

什么是贝叶斯平均

贝叶斯平均是一种常用的基于用户投票的排名算法,其目的是平衡热门项目与冷门项目的投票人数,使得它们之间的比较更为公平。

设有 \(N\) 个项目,项目 \(i\) 的票数为 \(n_i\),每张票的分值为 \(x_{ij}\),那么项目 \(i\) 的贝叶斯平均分为

\[B_i = \frac{Cm+\sum_{j=1}^{n_i}x_{ij}}{C + n_i}\]

其中 \(C\) 是一个与数据集大小相关的常数,\(m\) 是一个预设的平均分。

这个公式的意义是:假设预先给每个项目都投了 \(C\) 张票,每张票的平均分是 \(m\),然后再加上实际的票算一次算术平均分,即得到贝叶斯平均分。这样,就尽量平衡了热门项目与冷门项目的票数。

实践上,可以令 \(C\) 等于每个项目的平均票数,即

\[C = \frac{\sum_{i=1}^{N}n_i}{N}\]

令 \(m\) 等于每张票的平均分,即

\[m = \frac{\sum_{i=1}^{N}\sum_{j=1}^{n_i}x_{ij}}{\sum_{i=1}^{N}n_i}\]

这样,\(C\) 和 \(m\) 都会随着数据集的改变而改变,也就是说,贝叶斯平均会随着投票情况的改动而得到修正。

我们可以令 \(\bar{x}_ i\) 为项目 \(i\) 的算术平均分,即 \(\bar{x}_ i = \sum_{j=1}^{n_i}x_{ij}/n_i\),进而变换一下贝叶斯平均分的公式:

\[\begin{aligned} B_i &= \frac{\sum_{i=1}^{N}\bar{x}_i n_i / N + \bar{x}_i n_i}{\sum_{i=1}^{N}n_i/N + n_i} \\ &= \frac{\sum_{i=1}^{N}\bar{x}_i n_i + \bar{x}_i n_i N}{\sum_{i=1}^{N}n_i + n_i N} \end{aligned}\]