我们正在尝试找到项目(和以后的用户)之间的相似性,其中项目按用户在各种列表中排名(请考虑Hi Fidelity中的Rob,Barry和Dick)。给定列表中较低的索引表示较高的评级。

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

但是,据我所知,Pearson相关性的目的是补偿通常对事物评分较高或较低但相对评分相似的用户之间的差异。

在我看来,如果列表是连续的(尽管长度是任意的),则从该职位隐含的评级将以这种方式倾斜并不是问题。

我想在这种情况下,基于欧几里得的相似性就足够了。是这样吗使用Pearson相关会产生负面影响并发现不合适的相关吗?哪种相似性度量最适合此数据?

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

最佳答案

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,

  • 也就是说,相交中的项目数除以联合中的项目数。

    这种相似性度量不会惩罚相距甚远的排名。您可以看到:

    关于mahout - 列表项最有效的相似性度量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12934411/

    10-16 03:00