计算得分最多的项目的最佳算法是什么?

时间:2010-01-25 18:15:58

标签: algorithm math

我有一个用户在1到5之间得分的音乐项目 我需要一个公式来获得5个最得分的项目。

但显然,从1000个不同用户获得3.5平均分的项目将获得更多得分,然后一个项目从仅5个用户获得4.9平均分数...换句话说我认为如果项目得到人们的注意得分它,这表明该项目很有趣。所以在计算中,votesCount参数需要有权力。 (多少力量?我不确定,我要求你得到想法)。

我认为我们在函数中需要以下参数:votesAverage,votesCount。

5 个答案:

答案 0 :(得分:28)

对拥有大量选民的五星级系统进行加权投票

您可以使用贝叶斯估算来计算加权投票。

IMDb(互联网电影数据库)使用此计算来确定其IMDb Top 250. (注意:IMDb使用10颗星,但使用5颗星的公式相同)。

  

计算最高评级250标题的公式给出了真正的贝叶斯估计:

     

加权等级(WR)=(v÷(v + m))×R +(m÷(v + m))×C

     

其中:

     
      
  • R =电影的平均值(平均值)=(评级)
  •   
  • v =电影的投票数=(投票)
  •   
  • m =需要列入前250名(目前为3000名)的最低票数
  •   
  • C =整个报告的平均投票数(目前为6.9)
  •   

IMDb Reference

Wikipedia Reference

答案 1 :(得分:8)

如果你真的想以正确的方式去做,那么reddit评分算法可能是最好的选择。它是explained in detail herea high level by xkcd author Randall here

问题在于它并不适用于五星评级,这正是您的目标。您应该能够概括reddit的排序系统以使用评级。哎呀,它可能已经在某个地方完成了。我要去找它。

答案 2 :(得分:6)

平衡系统的一种简单方法是添加固定数量的假设用户(比如计数为H),他们都投票支持所有部分的长期平均值A.说平均值是3;然后公式变为

得分=(votesCount x votesAverage + H x A)/(votesCount + H)

现在,当投票数量增加时,假设的平均选民的相对影响力会减弱。

您可以通过实验设置H,或者通过思考来设置H.例如。如果你认为20票足以建立相对较强的评级,你可以设置H = 5。说。

答案 3 :(得分:0)

我按照方法使用我的音乐文件:

评级以百分比(0-100)衡量 未评级的歌曲可获得50%的礼物 每当有人为一首歌投票时,其评级就会增加 每当有人投票反对这首歌时,它的评级就会下降 如果歌曲评级高于MAX(100),则MAX设置为当前歌曲评级 如果歌曲评级低于MIN,则MIN设置为歌曲评级 在每次改变MIN或MAX的投票之后,我正在为列表中的每首歌做标准化,如:

NewRating =(CurrentRating - MIN)* 100 /(MAX -MIN)然后我将MIN设置为0,MAX设置为100.

此方法为新旧歌曲提供了相同的机会,可以快速获得正确的评分。每一次对最佳和最差歌曲的投票都会影响其他人,我也认为这是正确的事情。

当选择要播放(或投票)的歌曲时,我会生成0-100范围内的随机数,并搜索评级等于或高于此数字的下一首歌。

糟糕的歌曲很少被选中,选择很少,优秀的歌曲会更频繁地被选中,但我仍然有机会在将来的某个时间播放(投票)最糟糕的歌曲。

答案 4 :(得分:-1)

这个术语是bayesian estimate

一个常见的例子:

  

贝叶斯评级= (v*R + m*C)/(v+m)
  其中:
   R =歌曲的平均评分
   v =歌曲的票数
   m =需要列出的最低票数(例如10)
   C = 所有歌曲的平均投票次数