php – 如何评价或排名投票
我真的很抱歉,如果我错了我的问题,但我想要一些想法…我想要和排名算法的想法,包括他们提交投票的时间.
解决方法
好问题!
好吧,让我们来吧! 首先,在计算良好评级时你不能做到的一件事是Bayesianaverage 你已经阅读了它,但非常简化它需要注意以下事项: >投票少的参赛作品不是他们投票的真实意思,而是在整个数据集中具有平均评分的分数.例如,在IMDB上,默认评级为6.4.因此,一张只有2票,每张10星的电影可能仍然有6到7之间的东西.投票越多,它们的共同意义越大,评级就会从默认值中“拉开”. Imdb还实现了他们的电影在列表中显示的最低票数. 我觉得另一件令人困惑的事情是:为什么投票时间很重要?你不是指投票的时间吗?那么在我们的电影中,刚刚发布的电影更重要吗? 但无论如何!在这两种情况下,通常通过应用对数函数来获得良好的结果. 对于我们的电影示例电影相关性可以乘以 1 + 1/SQRT(1 + CURRENT_YEAR - RELEASE_YEAR ) 所以1是每部电影获得的套接字评级. 但是1954年或1963年的电影差异并不是那么大. 所以请记住: >你在计算中使用的一切.它真的是线性的吗?可能会歪曲你的收视率吗?整个数据集中的关系是否合理? 如果你想获得更多的投票,你可以用同样的方式做到这一点,但加权你的投票.如果你想让最近投票的东西“热身”,这也是有道理的……因为它目前很热,并且在你的社区中讨论过. 该计划说这仍然是一项艰苦的工作.很多游戏等 让我给你最后一个想法. 在我工作的公司,我们计算电影的相关性. 我们有一个配置数组,我们在最终相关性中存储了几个因素的“权重”. 它看起来像这样: $weights = array( "year" => 2,// release year "rating" =>13,// rating 0-100 "cover" => 4,// cover available? "shortdescription" => 4,// short descr available? "trailer" => 3,// trailer available? "imdbpr" => 13,// google pagerank of imdb site ); 然后我们为每个度量计算0到1之间的值.有不同的方法.但是,让我向您展示我们的评级示例(它本身是我们抓取的几个平台的聚合评级,并且具有不同的权重等等) $yearDiff = $data["year"] - date('Y'); //year if (!$data["year"]){ $values['year'] = 0; } else if($yearDiff==0) { $values['year'] = 1; } else if($yearDiff < 3) { $values['year'] = 0.8; } else if($yearDiff < 10) { $values['year'] = 0.6; } else { $values['year'] = 1/sqrt(abs($yearDiff)); } 因此,您看到我们硬编码了一些“年龄间隔”,并仅依赖于sqrt功能,仅适用于较旧的电影.实际上差异很小所以这里的SQRT例子非常差. 例如,您也可以使用像窦曲线等周期函数来计算季节性相关性!例如,你的年份范围从0到1,那么你可以使用窦功能来衡量一年中当前时间的夏季命中/冬季命中/秋季命中! IMDB pagerank的最后一个例子.它是完全硬编码的,因为只有10个不同的值可能并且它们不以统计同质的方式分布(pagerank 1或2甚至比没有更糟): if($imdbpr >= 7) { $values['imdbpr'] = 1; } else if($imdbpr >= 6) { $values['imdbpr'] = 0.9; } else if($imdbpr >= 5) { $values['imdbpr'] = 0.8; } else if($imdbpr >= 4) { $values['imdbpr'] = 0.6; } else if($imdbpr >= 3) { $values['imdbpr'] = 0.5; } else if($imdbpr >= 2) { $values['imdbpr'] = 0.3; } else if($imdbpr >= 1) { $values['imdbpr'] = 0.1; } else if($imdbpr >= 0) { $values['imdbpr'] = 0.0; } else { $values['imdbpr'] = 0.4; // no pagerank available. probably new } 然后我们总结如下: foreach($values as $field=>$value) { $malus += ($value*$weights[$field]) / array_sum($weights); } 这可能不是你的问题的确切答案,但更广泛,但我希望我指出你正确的方向,并给你一些你的想法可以拿起的点! 使用您的应用程序获得乐趣和成功! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |