Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88687
  • 博文数量: 16
  • 博客积分: 356
  • 博客等级: 一等列兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-13 21:09
文章分类

全部博文(16)

文章存档

2012年(16)

我的朋友

分类: Delphi

2012-06-24 17:13:07

PRE: 其实这只能算是一个总结,一个读后感外带一点引申。《基于用户投票的排名算法》系列,作者:阮一峰。这个系列的文章确实写得很漂亮,层层深入,引人思考。作者blog:
http://www.ruanyifeng.com/blog/

1. 只有赞成票
(1)单位时间内用户的投票数进行排名Delicious。
实现:每小时统计一次次数,高的在前。
优点:简单,确实能反映热度。
缺点:不够平滑;热门内容可能一直在前。
(2)时间衰减投票数Hack news
实现:P为投票数,T为时间,G为衰减因子。
优点:有淘汰策略
缺点:只能处理好评。

2. 赞成和反对差额(Reddit的热点文章)
实现:z为赞成-反对,y为赞成>反对?1:-1
优点:考虑到赞成和反对的行为,而且根据时间衰减,
缺点:基本上由发帖时间决定,超级受欢迎的文章会排在最前面,一般性受欢迎的文章、有争议的文章都不会很靠前。

3.参与度、质量、时间。StackOverflow
实现:Qviews浏览量、Qscore(问题得分)、Qanswers(回答的数量)、Ascores(回答得分)、Qage(距离问题发表的时间)、Qupdated(距离最后一个回答的时间)
优点:根据实际需要,综合了数量、质量和热度。
缺点:Ascores只是简单的相加,有可能淹没一个特别好的答案的权重。

4. 牛顿冷却定律
其实,就是按时间衰减的定律。

5. 威尔逊区间(Reddit的评论排名,目前就使用这个算法。)
实现:p表示样本的"赞成票比例",n表示样本的大小,表Z1-a/2示对应某个置信水平的z统计量。(此公式)如果n非常小,下限值会大大小于p。
优点:解决了投票人数过少、导致结果不可信的问题。
缺点:排行榜前列总是那些票数最多的项目,新项目或者冷门的项目,很难有出头机会。

6.贝叶斯平均(IMBD)
实现:c每个项目的平均投票数,m总体平均分,x每张选票的值,n投票人数
优点:引入先验概率,每一次新的投票都是一个调整因子,使总体平均分不断向该项目的真实投票结果靠近。使得数量因素变得平均,影响变小。(数量用时间来衰减呢?前面都用到了,时间衰减使得数量增长的影响变得越来越小)
缺点:假设用户的投票是正态分布,无法凸显debate。

总上所述:
我觉得,最重要的两个因素:(1)牛顿冷却;(2)威尔逊空间。还是要根据实际的情况来进行选择。
补充一点:
应该考虑到用户投票的行为:有些人比较苛刻,给的分都比较低;而有的人比较宽容,喜欢给高分,可以统计他们投票的概率,做一个归一化,使得每个人的投票行为能统一的衡量。如果有相应的反馈机制,再加上投票人的权重衡量。
阅读(1882) | 评论(0) | 转发(0) |
0

上一篇:php memcached mget/mset

下一篇:python参数传递

给主人留下些什么吧!~~