比方说,我有一个用户数据库,他们对不同产品的评分范围为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 = .86667a = (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发布于 2014-10-09 02:24:07
等级偏差和规模很容易通过标准化来解释。在向量空间共嵌入中使用欧几里德相似度量的目的是将推荐问题简化为寻找最接近的邻域问题,这是一种既精确又近似的有效方法。在现实生活中,您不想做的是比较每一项/用户对,并根据一些昂贵的度量对它们进行排序。那只是没有规模。
其中一个诀窍是使用近似方法将羊群筛选成可管理的试探性推荐,然后在此基础上运行昂贵的排名。
编辑: Microsoft正在RecSys上发表一篇关于这个主题的论文:内积空间欧氏变换加速Xbox推荐系统
发布于 2014-10-09 01:57:41
对于评级,我认为您需要使用斯皮尔曼秩相关作为您的相似性度量。
在比较文档时经常使用余弦相似度,这可能不适合于秩变量。欧氏距离对于较低维数是很好的,但是秩变量的比较通常需要Spearman。
这里有一个关于斯皮尔曼的越值化问题(vs皮尔森),它可能为您提供更多的光线。
https://datascience.stackexchange.com/questions/1229
复制相似问题