0

我需要根据用户评分对一些产品进行分类。

假设我们有 3 个产品 {a,b,c} 并且我们有用户对此产品的反馈。哪个用户给我们反馈并不重要(如果您熟悉,这个问题与相关过滤无关 - 用户兴趣不是这里的情况)

以下每一行都是用户尝试比较这 3 种产品时的反馈:

a 150 分 - b 0 分(该用户刚刚告诉我们他对 2 种产品 a 和 b 的看法,并且在比较 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 中获得了更好的排名

/************************************************* ******************************/

4

3 回答 3

2

看看http://msdn.microsoft.com/en-gb/magazine/dd148646.aspx?pr=blog。它描述了五个“排名”系统。上下文是关于测试的,但我认为基本概念足以适用于您的问题域。

于 2009-07-17T12:18:21.857 回答
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

完成此操作后,您可以总结每个产品针对所有用户的所有结果。

于 2009-07-17T12:16:19.737 回答
1

听起来相当复杂。我处理它的方法是定期重新评估排名并将排序顺序存储到数据库中。根据您的描述,这听起来像是一个巨大的代数系统。我不知道这是否可以在数据库中解决,但即使可以,也可能需要 O(n^holy crap) 很长时间才能解决,所以我觉得缓存在这里是你的朋友。

至于排序顺序的实际发现,我会建立一个方程式列表,例如:

a = b + 400 c = a + 10

一旦你建立了整个列表,解决整个问题并缓存排名

于 2009-07-17T12:19:02.747 回答