评级建议的余弦相似度?为什么要使用它?

数据挖掘 机器学习 推荐系统
2021-09-25 18:06:04

假设我有一个用户数据库,他们以 1-5 的等级对不同的产品进行评分。我们的推荐引擎根据高度相似的其他用户的偏好向用户推荐产品。我寻找相似用户的第一种方法是使用余弦相似度,并将用户评分视为向量分量。这种方法的主要问题是它只测量矢量角度而没有考虑评级规模或幅度。

我的问题是这样的:

仅使用两个向量的向量分量之间的百分比差异作为相似度的度量是否有任何缺点如果我使用该方法而不是余弦相似度或欧几里得距离,我会遇到什么缺点(如果有的话)?

例如,为什么不这样做:

n = 5 stars
a = (1,4,4)
b = (2,3,4)

similarity(a,b) = 1 - ( (|1-2|/5) + (|4-3|/5) + (|4-4|/5) ) / 3 = .86667

而不是余弦相似度:

a = (1,4,4)
b = (2,3,4)

CosSimilarity(a,b) = 
(1*2)+(4*3)+(4*4) / sqrt( (1^2)+(4^2)+(4^2) ) * sqrt( (2^2)+(3^2)+(4^2) ) = .9697
2个回答

评级偏差和规模很容易通过标准化来解释。在向量空间共嵌入中使用欧几里得相似度度量的要点在于,它将推荐问题简化为寻找最近邻的问题,这可以有效地精确和近似地完成。您不想在现实生活中做的是必须比较每个项目/用户对并根据一些昂贵的指标对它们进行排序。那只是没有规模。

一个技巧是使用近似值将牛群剔除到可管理的初步建议规模,然后在此之上运行您的昂贵排名。

编辑:微软研究院现在正在 RecSys 上发表一篇涵盖这个主题的论文:使用内积空间的欧几里德变换加速 Xbox 推荐系统

对于评级,我认为您需要将Spearman 的等级相关性用于您的相似性指标。

比较文档时经常使用余弦相似度,可能不适合排名变量。欧几里得距离适用于较低维度,但等级变量的比较通常需要 Spearman。

这是关于 Spearman (vs Pearson) 的 CrossValidated 上的一个问题,它可能会为您提供更多信息。