我们试图找到项目(以及后来的用户)之间的相似性,其中项目在用户的各种列表中排名(想想 Hi Fidelity 中的 Rob、Barry 和 Dick)。给定列表中较低的索引意味着较高的评级。
我想一个标准的方法是使用 Pearson 相关性,然后以某种方式反转索引。
但是,据我了解,Pearson 相关性的目的是补偿通常对事物进行较高或较低评分但具有相似相对评分的用户之间的差异。
在我看来,如果列表是连续的(尽管长度是任意的),那么位置所暗示的评级会以这种方式倾斜并不是问题。
我想在这种情况下,基于欧几里得的相似性就足够了。是这种情况吗?使用 Pearson 相关性会产生负面影响并找到不合适的相关性吗?什么相似性度量可能最适合这些数据?
此外,虽然我们希望列表中的位置产生影响,但我们不想惩罚相距太远的排名。两个用户都在列表中具有非常不同的排名的项目仍然应该被认为是相似的。
最佳答案
Jaccard Similarity在你的情况下看起来更好。要包括您提到的排名,您可以采用一袋元素的方法。
使用您的 ( Rob
, Barry
, Dick
) 示例,它们的评分分别为 (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 相似度如下:a
之间的交集和 b
= [Dick, Barry]
a
和 b
= [Rob, Rob, Rob, Barry, Barry, Dick, Dick]
也就是说,交集中的项目数除以联合中的项目数。
此相似性度量确实 不是 惩罚相距甚远的排名。你可以看到:
Two users both featuring an item in a list with very differing ranking should still be considered similar.
关于mahout - 列表排名项目的最有效相似度度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12934411/