如何为二进制评分系统实现贝叶斯平均算法

10

我有一个系统,人们可以对一个物品进行赞成或反对的投票,我希望将投票结果显示为五星评级。

我一直在尝试使用贝叶斯评级算法,该算法在这里这里中有解释,但没有成功。

例如:我的数据库中有三个项目(A、B和C):

A = 500个赞成和500个反对票 B = 0个赞成和1000个反对票 C = 0个赞成和1000个反对票

如何计算每个项目的贝叶斯平均分数,使其在1到5的评分范围内获得得分?


可能是重复的问题:什么是计算得分最高项的最佳算法? - BlueRaja - Danny Pflughoeft
2个回答

7

5
只针对正面/负面评价生效,无法适用于五星级评分。为了节省他人时间,这一点需要说明。 - mattmanser

3

简单的代数:

AvgVotes = 所有投票总数 / 所有项目总数

AvgRating = 所有项目中赞成票数的总和 * 5 / 所有投票总数

CurVotes = 当前项目的投票数

CurRating = 当前项目中赞成票数的总和 * 5 / 当前项目的投票数

TotalVotes = 所有投票总数 + 当前项目的投票数总和

((AvgVotes * AvgRating) + (CurVotes * CurRating)) * 5 / TotalVotes

所以,将您的数字代入计算A的权重...

AvgVotes = 1000

AvgRating = 0(请注意,在此计算中不要包括您正在评估的项目的数字)

CurVotes = 1000

CurRating = 500 * 5 / 1000 = 2.5

Total Votes = 2000 + 1000 = 3000

((1000 * 0) + (1000 * 2.5)) * 5 / 3000 = 4.166

我忘记了一点,请勿在上述任何计算或总和中包括任何没有投票的项目,否则会使权重失衡。

编辑 - 简化解决方案:

我应该指出,问题可以进行简化处理。我只是为了理解而演示了长手算法。压缩的算法看起来像:

定义:

SET = 与当前评估目标无关的任何内容,其中投票数大于零。

TARGET = 您当前正在尝试评估的元素

25 * (((SET中赞成票数总和)/(SET中项目总数)) + (TARGET中赞成票数总和)) / (TARGET中投票数总和 + SET中投票数总和)

再次将您的数字代入计算'A'以进行澄清和证明:

(25 * ((0/2) + 500)) / (1000 + 2000) = 4.166


我将我的评论移动到了我编辑过的帖子中,以便更容易阅读。 - Peter Hanneman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接