推荐引擎:余弦相似度与测量每个向量分量之间的差异百分比

Posted

技术标签:

【中文标题】推荐引擎:余弦相似度与测量每个向量分量之间的差异百分比【英文标题】:Recommendation Engine: Cosine Similarity vs Measuring %difference between each vector component 【发布时间】:2014-12-03 10:48:34 【问题描述】:

假设我有一个用户数据库,他们以 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

【问题讨论】:

这是 datascience.stackexchange.com 的一个很好的候选者 【参考方案1】:

我想一个答案是,并不是所有的推荐问题都在 1-5 的等级上运行,也不是所有的都在原始特征空间上运行,但有时在低秩特征空间上运行。答案在那里改变。

我不认为余弦相似度是评分的重要指标。收视率不是你想要正常化的东西。如果您将每个用户的评分标准化为均值为 0,这会更有意义。

我也不确定使用这种修改后的 L1 距离是否最佳。也考虑正常的欧几里得 / L2 距离。最后,经验测试会告诉您什么最适合您的数据。

【讨论】:

以上是关于推荐引擎:余弦相似度与测量每个向量分量之间的差异百分比的主要内容,如果未能解决你的问题,请参考以下文章

Scipy余弦相似度与sklearn余弦相似度

Spark笔记(1) :余弦相似度计算

余弦计算相似度理解以及计算

如何计算两个向量的余弦相似度?

计算两个向量的余弦相似度

计算两个向量的余弦相似度