Neo4j 余弦相似性-作为推荐引擎的缺点?

Neo4j 余弦相似性-作为推荐引擎的缺点?,neo4j,machine-learning,knn,recommendation-engine,cosine-similarity,Neo4j,Machine Learning,Knn,Recommendation Engine,Cosine Similarity,我见过在K-最近邻算法中使用余弦相似性来根据用户偏好生成推荐。在这些模型中,给定产品的用户评分被视为向量,然后两个用户之间的相似性由两个向量之间的余弦相似性确定。e、 g 我的问题是: 有人能解释一下使用余弦相似性的推荐引擎是如何解释并行用户偏好的吗?在我看来,两个用户可以有完全极性的评级偏好,但如果他们有平行但不同的偏好,则会产生1的余弦相似度。例如,如果一个用户将5部电影评为10颗星中的1,而另一个用户将5部电影评为10颗星中的10颗星,那么他们的余弦相似性将是1,在我看来,这似乎是对用户相

我见过在K-最近邻算法中使用余弦相似性来根据用户偏好生成推荐。在这些模型中,给定产品的用户评分被视为向量,然后两个用户之间的相似性由两个向量之间的余弦相似性确定。e、 g

我的问题是: 有人能解释一下使用余弦相似性的推荐引擎是如何解释并行用户偏好的吗?在我看来,两个用户可以有完全极性的评级偏好,但如果他们有平行但不同的偏好,则会产生1的余弦相似度。例如,如果一个用户将5部电影评为10颗星中的1,而另一个用户将5部电影评为10颗星中的10颗星,那么他们的余弦相似性将是1,在我看来,这似乎是对用户相似性的不准确度量

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

a=1,1,1和b=10,10,10


然后我们可以用余弦相似性来衡量它们之间的相似程度。但在本例中,它们的余弦相似性将为1,即使它们表示极性相反的用户偏好

大家都知道,香草余弦相似性有一个重要的特点,即没有考虑不同用户之间在评分量表上的差异

调整后的余弦相似性通过从每对同等级的配对中减去相应的用户平均值来抵消这一缺点。从形式上讲,使用该方法的项目i和j之间的相似性 方案由以下公式给出:

这里,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

这是众所周知的香草余弦相似性有一个重要的-不同用户之间的评分量表的差异没有考虑在内

调整后的余弦相似性通过从每对同等级的配对中减去相应的用户平均值来抵消这一缺点。从形式上讲,使用该方法的项目i和j之间的相似性 方案由以下公式给出:

这里,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

这正是我想要的解释,非常感谢。当我运行这些数字时,我并没有得到和你相同的值……对于sima,b我得到的相似性为-1。同样地,对于sima,a1我得到的相似性为-.58。@greeness这不是与Pearson相关系数相同吗?如果没有,区别是什么?是的,人们通常谈论向量角度的余弦相似性,但如果你把向量看作成对样本,它可以粗略地认为是一种相关性。这正是我想要的解释,非常感谢。当我运行这些数字时,我并没有得到和你相同的值……对于sima,b我得到的相似性为-1。同样地,对于sima,a1我得到的相似性为-.58。@greeness这不是与Pearson相关系数相同吗?如果没有,区别是什么?是的,人们通常谈论向量角度的余弦相似性,但如果你认为向量是成对样本的话,可以粗略地认为它是一种相关性。