我需要根据用户评分对某些产品进行排序。
假设我们有3个产品{a,b,c},我们有关于此产品的用户反馈。哪个用户给我们反馈并不重要(如果你熟悉它,这个问题不是关于相关过滤的问题 - 用户兴趣不是这里的情况)
以下每一行都是用户在尝试比较3种产品时的反馈:
150分 - b 0分(这位用户只是告诉我们他对2个产品a和b的看法以及a和b的比较,但如果他给出150分然后b值0分)
150分 - 20分
c 200分 - 10分(尽管前一个用户认为c比a更好)
200分 - B 40分 - c 100分
150分 - b 50分
150分 - b 20分
(这些评分仅仅是一个样本,在现实世界中,产品和评级的数量远大于此)
现在我需要一种算法来根据用户投票查找产品的排名。在我看来,最好的方法是用相关图描述这个问题,并将所有产品相互连接。
感谢任何形式的帮助或提示。
/ ********************************************** ********* / **
你不能只是添加积分并计算产品积分的平均值因为重要的是如何得到他的积分假设a得到800分对b - 然后c得到10分与这样:
200 - b 0
200 - b 0
200 - b 0
200 - b 0
c 10 - a 0(这意味着c优于a)
所以肯定a比b好,但是小点10分c从
得到更好的排名/ ********************************************** ********* /
答案 0 :(得分:2)
看看http://msdn.microsoft.com/en-gb/magazine/dd148646.aspx?pr=blog。它描述了五个“排名”系统。上下文是关于测试的,但我认为基础概念适用于您的问题域。
答案 1 :(得分:1)
多么奇怪的排名方式。我建议,对于每个用户,您需要为他们排名第一的所有产品创建排名。例如,如果用户执行此操作:
a 200 - b 0
c 10 - a 0
然后您可能希望将其转换为用户的完整集合,如下所示:
c 210 - a 200 - b 0
然后你需要规范化(假设所有用户具有相同的权重):
c 100 - a (200/210) - b 0
然后,如果用户具有不同的权重(换句话说,一个用户比另一个用户具有更高的可信度),那么您可以这样做(假设该用户具有5的可信度):
c 100*5 - a (200/210)*5 - b 0
完成后,您可以总结所有用户的每个产品的所有结果。
答案 2 :(得分:1)
听起来很复杂。我接近它的方法是定期重新排序排名并将排序顺序存储到数据库。从你所描述的,它听起来像一个巨大的代数系统。我不知道是否可以在数据库中解决这个问题,但即使可以,也可能需要花费很长时间才能解决,所以我觉得缓存将成为你的朋友。
至于排序顺序的实际发现,我建立了一个方程列表,如:
a = b + 400 c = a + 10
一旦你有整个列表构建,解决整个事情并缓存排名