1

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

1 回答 1

1

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

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

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

于 2014-10-08T18:54:45.617 回答