我需要根据用户评分对一些产品进行排序。
假设我们有3个产品{a,b,c},我们有关于这个产品的用户反馈。哪个用户给我们反馈并不重要(如果你熟悉这个问题,这个问题不是关于相关过滤的--用户兴趣不是这里的情况)
下面的每一行都是用户在尝试比较这3种产品时的反馈:
A 150分-b 0分(这位用户刚刚告诉我们他对两个产品a和b的看法,他认为如果他给150分,那么b就等于0分)
A 150分-c 20分
C 200分-a 10分(尽管前面有一个,这个用户认为c比a更好)
A 200分-b 40分-c 100分
A 150分-b 50分
A 150分-b 20分
(这些评级只是一个样本,在现实世界中,产品的数量和评级比这个大得多)
现在我需要一个算法来找到基于用户投票的产品排名。在我看来,最好的方法是用相关图来描述这个问题,并将所有产品相互联系起来。
任何形式的帮助或提示都是值得感谢的。
/******************************************************************************/**
你不能简单地把积分相加,然后计算乘积积分的平均值,因为这很重要,假设a对b得到800分,那么c对a得到10分,就像这样:
A 200 -b 0
A 200 -b 0
A 200 -b 0
A 200 -b 0
C 10 -a 0(这意味着c比a更好)
因此,a肯定比b好,但只要有10分,c的排名就会比a好。
/****************************************************************************/
发布于 2009-07-17 12:18:22
看看http://msdn.microsoft.com/en-gb/magazine/dd148646.aspx?pr=blog吧。它描述了五个“排名”系统。上下文是关于测试的,但我认为基本概念适用于您的问题领域。
发布于 2009-07-17 12:16:20
这是一个多么奇怪的排名方式。我建议,对于每个用户,您需要为他们排名第一的所有产品创建一个排名。例如,如果用户这样做:
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一旦你这样做了,你就可以对所有用户的每个产品的所有结果进行汇总。
发布于 2009-07-17 12:19:03
听起来很复杂。我的方法是定期重新评估排名,并将排序顺序存储到数据库中。从你的描述来看,它听起来像是一个巨大的代数系统。我不知道这是否可以在数据库中解决,但即使可以,也可能需要O(n^天哪)很长的时间才能解决,所以我觉得缓存将是您的朋友。
至于排序顺序的实际结果,我将构建一个方程式列表,如下所示:
A=b+ 400 c=a+ 10
一旦你建立了整个列表,解决整个问题并缓存排名
https://stackoverflow.com/questions/1142874
复制相似问题