zoukankan      html  css  js  c++  java
  • 用户投票排名算法总结

    来源:http://blog.csdn.net/Snail_Moved_Slowly/article/details/79255491

    http://blog.csdn.net/Real_Myth/article/details/48974853

    其实这只能算是一个总结,一个读后感外带一点引申。《基于用户投票的排名算法》系列,作者:阮一峰。这个系列的文章确实写得很漂亮,层层深入,引人思考。作者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。
     
    总上所述:
    很显然看似简单的问题其实有很多因素进行影响,当然针对自己的项目还要进行相应处理,不同的因素权重不同必然导致结果有所偏重。
     
     
     
  • 相关阅读:
    目标检测中roi的有关操作
    JavaScript高级程序设计读后感(一)
    手机app后台初学
    DTO数据传输对象
    数据库设计系列之四--ER图
    数据库设计系列之三
    数据库设计系列之二
    数据库设计系列之一
    Linux命令大全
    Linux登录密码修改
  • 原文地址:https://www.cnblogs.com/zhangbojiangfeng/p/8540183.html
Copyright © 2011-2022 走看看