5

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

假设我们有 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 分

(这些评级只是一个样本,在现实世界中,产品和评级的数量比这大得多)

现在我需要一种算法来根据用户投票找到产品的排名。在我看来,最好的方法是用相关图来描述这个问题,并将所有产品相互连接起来。

任何形式的帮助或提示表示赞赏。

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

您不能只添加分数并计算产品分数的平均值,因为它如何获得他的分数很重要。假设ab得 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)

所以绝对ab好,但只有 10 分,c从a中获得了更好的排名

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

4

3 回答 3

5

你有一些挑战。添加一个排名c 0 - b 20并得到一个圆圈,其中c < b < a < c

当然,您的订单不仅不是transitif(from a < b < c 不遵循 a < c),它也不是全部的(可能存在您无法决定哪个更好的元素,因为没有进行用户投票,甚至通过其他元素。

你得到的是一个不连贯的、有向的、有限的图。(使用边缘的方向来说明哪个元素(节点更好)。

从某个节点开始,您可以在图中找到更好的节点,也许会找到多个不可比较的解决方案。如果您再次访问起始节点,请停止处理该路径。

也许数学中的序论可以帮助你:寻找序论、偏序、哈斯图

为了使这更实用:

使用每个元素具有一行和一列的二维数组。在单元格(a,b)中计算评分的总和。从某个元素 a 开始,跟踪所有正 (>0) 连接,直到您到达没有正连接的节点或回到您已经访问过的节点。这些节点是您的解决方案。

于 2009-07-17T12:16:29.423 回答
3

Baysean评级系统可能是您最好的选择 - 它考虑了投票和一个项目的相对投票数,以便给它一个加权分数。

于 2009-07-17T11:01:42.247 回答
1

我认为您需要说明每个人对每种产品的投票方式 - 例如:第 1 个人投票:a 投票 100,b 投票 50,c 投票 0 个人 2 投票 a,b 投票 200,c 投票 80

这应该翻译进入:
人 1 为 a 投了 3 票,为 b 投了 3 票,为 c
投了 -1 人 2 为 a 投了 -1,为 b 投了 3 票,为 c 投了 2

我正在使用的地方:
3 投最高票
2 投第二高
1投最低
AND -1 如果他们投了 0 票(表示他们不喜欢/不考虑该产品)

无论如何我最初的想法

于 2009-07-17T12:28:55.090 回答