我有一个系统,在那里人们可以投票赞成或反对一个项目,我想将结果显示为5星评级。
here和here解释说,我一直在尝试使用贝叶斯评级算法,但没有成功。
例如:我的数据库中有三个项目(A、B和C):
A= 500上升和500下降投票B=0上升和1000下降投票C=0上升和1000下降投票
如何计算每个项目的贝叶斯平均评分,使其在1到5的范围内获得分数?
发布于 2010-07-01 22:57:21
这篇名为How Not To Sort By Average Rating的博客文章准确地描述了您的情况,以及如何使用Wilson Score confidence interval解决它。Reddit used this效果很好。
发布于 2010-07-01 22:57:04
简单代数:
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
总票数= 2000 + 1000 = 3000
(1000 * 0) +(1000* 2.5)) *5/ 3000 = 4.166
我忘了补充,不要在上面的任何计算或总和中包括任何没有选票的项目,否则会抛出权重。
编辑-简化的解决方案:
我应该注意到,对于这个问题有一个可以执行的简化解决方案。我只是为了理解而演示了手写形式。压缩算法如下所示:
定义:
SET =投票大于零的与当前评估目标无关的任何内容。
TARGET =当前正在尝试计算的元素
25*(设置票数总和)/(设置项目总和))+(目标票数总和))/(目标票数总和+设置票数总和)
再次输入您的数字评估'A‘,以澄清和证明:
(25*((0/2)+500)) / (1000+2000) = 4.166
https://stackoverflow.com/questions/3158635
复制相似问题