列表排名项目的最有效的相似性度量

时间:2012-10-17 12:32:06

标签: mahout recommendation-engine collaborative-filtering

我们试图找到项目(以及后来的用户)之间的相似性,其中项目在用户的各种列表中排名(想想Rob,Barry和Dick在Hi Fidelity中)。给定列表中较低的索引意味着更高的评级。

我认为标准方法是使用Pearson相关性,然后以某种方式反转索引。

然而,据我了解,Pearson相关性的目的是弥补用户之间的差异,这些用户通常会评价更高或更低但具有相似的相对评级。

在我看来,如果这些名单是连续的(尽管是任意长度),那么该职位所暗示的评级不会以这种方式倾斜。

我认为在这种情况下,基于欧几里德的相似性就足够了。是这样的吗?使用Pearson相关性会产生负面影响并找到不合适的相关性吗?什么相似性度量可能最适合这些数据?

此外,虽然我们希望列表中的位置生效,但我们不希望惩罚相距太远的排名。两个用户同时列出具有非常不同排名的列表中的项目仍应被视为相似。

2 个答案:

答案 0 :(得分:3)

在您的情况下,

Jaccard Similarity看起来更好。要包括您提到的排名,您可以采取一揽子项目方法。

使用(RobBarryDick)的示例,其评分分别为(3,2,1),您可以在此插入Rob 3次用户a的包。

Rob, Rob, Rob.

然后对Barry,你做两次。目前的行李如下所示,

Rob, Rob, Rob, Barry, Barry.

您最终将Dick放入包中。

Rob, Rob, Rob, Barry, Barry, Dick

假设另一位用户b有一个[Dick, Dick, Barry]的行李,您可以按如下方式计算Jaccard的相似度:

  • ab = [Dick, Barry]
  • 之间的交集
  • ab = [Rob, Rob, Rob, Barry, Barry, Dick, Dick]
  • 的结合
  • Jaccard相似度= 2/7,

即交叉点中的项目数除以联合中的项目数。

这种相似性衡量标准 NOT 会惩罚相距甚远的排名。你可以看到:

  

两个用户同时在列表中列出具有非常不同排名的项目仍应被视为相似。

答案 1 :(得分:1)

仅基于排名的最知名的相似性指标是Spearman's correlation。它只是将“1”分配给第一个项目,“2”分配给第二个项目,依此类推并计算(Pearson)相关系数。 (您可以使值下降,这更直观 - 与Pearson的相关性无关。)

Spearman的相关性在项目中实现,但是,我认为它不是非常有用。

Tau rank是衡量排名列表匹配程度的更有原则的衡量标准,但未实施。这不会很难。