1

我有 2 个提供不同结果的排序算法(我按相关性对信息进行排序)。结果,两种方式我都以不同的顺序获得相同的物品。我知道,第一个算法比第二个提供更好的结果。我想获得相对值(从 0 到 1),这意味着“array2 的前 N ​​个值是 array1 的前 N ​​个值的 0.73 质量”(我比较第一个元素,因为用户在没有任何操作的情况下看到它)。首先想到的是使用array1和array2中位置之间的差异之和。例如:

数组1:1 2 3 4 | 5 6 7 8 9

数组2:8 6 2 3 | 7 4 1 5 9 - array1 中的位置

数组2*:5 5 2 3 | (大于 4 替换为 5 以获取 diapasone 0..1 中的相对值)

我想比较前 4 个元素:

S = 1 + 2 + 3 + 4 - 标准具之和,最大偏差

D = |1 - 5| + |2 - 5| + |3 - 2| + |4 - 3| = 9 - 这是绝对偏差

为了计算相对质量,我使用下一个公式:(S - D)/S = 0.1。

有没有标准的算法?这种算法有什么缺点?

4

1 回答 1

1

您正在寻找的可能是DCG [Discounted Cumulative Gain] 和nDCG [normalized DCG],它们用于对相关性进行排名。

这假设一个列表 [让它成为list2] 是一个基线 - “绝对真理”,并且list1应该尽可能接近它。
这个想法是,如果第一个元素乱序 - 如果第 10 个元素乱序则更重要。

该解决方案在我在这篇文章中的回答中描述了更多详细信息和一个示例[对不起,我的自我推销,它似乎很适合这里]。基本思想是评估:

DCG(list1)/DCG(list2)

其中每个元素的相关性来源于list2其自身,例如:rel_i = 1/log(1+i)

笔记:

  • 当然DCG只能对相关n元素进行计算,而不是对整个列表进行计算。
  • 此解决方案将产生1iflist1 == list2
  • 该解决方案假设重要的是元素出现的位置,而不是元素的数值。它完全无视数值。
于 2012-04-17T13:45:03.777 回答