gpt4 book ai didi

neo4j - 余弦相似度 - 作为推荐引擎的缺点?

转载 作者:行者123 更新时间:2023-11-30 08:52:38 25 4
gpt4 key购买 nike

我见过 K 最近邻算法中使用余弦相似度来根据用户偏好生成推荐。在这些模型中,给定产品的用户评分被视为向量,然后两个用户之间的相似度由两个向量之间的余弦相似度确定。 (例如http://www.neo4j.org/graphgist?8173017)

我的问题是这样的:谁能解释一下使用余弦相似度的推荐引擎如何考虑并行用户偏好? 在我看来,两个用户可以具有完全极性的评分偏好,但如果他们具有平行(但不同)的偏好,则生成的余弦相似度为 1。例如,如果一个用户将 5 部电影评分为 1满分为 10 颗星,而另一个用户将相同的 5 部电影评为满分 10 颗星中的 10 颗,则它们的余弦相似度将为 1(在我看来,这似乎是对用户相似度的不准确衡量)。

cosine similarity

问题示例:如果我们正在测量两个用户的用户偏好,并且我们正在测量他们对 3 个产品的偏好,我们可以将他们的偏好存储为两个向量:

a =(1,1,1) 和 b=(10,10,10)

然后我们可以使用余弦相似度来衡量它们之间的相似程度。但在这种情况下,它们的余弦相似度将为 1,即使它们代表截然相反的用户偏好。

最佳答案

众所周知,普通余弦相似度有一个重要的 drawback – 不考虑不同用户之间评分量表的差异。

调整后的余弦相似度通过从每个共同评分对中减去相应的用户平均值来弥补这一缺点。形式上,项目 i 和 j 之间的相似度使用此方案由下式给出 enter image description here

这里R´u是第u个用户评分的平均值。

在您的示例中,经过预处理后,a 和 b 都变为

(0,0,0). // We cannot calculate the cosine similarity since the normalizer is 0. 

这在现实中很少见(而且,如果用户始终对每个项目评分相同的分数,则对理解用户或项目没有任何贡献)。

假设我们在每个用户的偏好向量中添加另一个偏好分数,以使相似度可计算。

a = (1,1,1,2)
b = (10,10,10,8)
a1 = (1,2,2,1) // a user that has similar preference to a
b1 = (9,8,9,10) // another user that has similar preference to b
norm_a = a - mean(a) = [-0.25000 -0.25000 -0.25000 0.75000]
norm_b = b - mean(b) = [0.50000 0.50000 0.50000 -1.50000]
norm_a1 = [-0.50000 0.50000 0.50000 -0.50000]
norm_b1 = [0 -1 0 1]

sim(a,b) = norm_a*norm_b / (sqrt(sum(norm_a.^2)) * sqrt(sum(norm_b.^2))) = -1

同样:

sim(a,a1) = 0.866
sim(b,b1) = -0.82

关于neo4j - 余弦相似度 - 作为推荐引擎的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com