查找余弦相似度时,非评级字段的值应该是多少

数据挖掘 相关性 推荐系统 余弦距离
2021-10-04 13:05:11

我正在开发一个非常基本的图书推荐系统。我想知道在查找余弦相似度时如何处理用户未评分的字段,我们应该忽略它们并仅使用评分字段进行计算,还是应该将它们标记为 0。

我正在关注书说要排除这些字段,因为它会在欧几里得和皮尔逊相关的情况下给出错误的解释,但在余弦相似性的情况下,它将所有未评级的字段设为 0。

有人可以解释为什么需要将非评级字段设置为 0 仅用于余弦而不是其他字段,或者是否有不同的方法来做到这一点。(我知道在 Euclidean 和 Pearson 中设置字段 0 会如何影响输出,但不确定余弦)

2个回答

实施方面,有充分的理由使 0 对应于未评级。由于大多数用户没有对大多数书籍进行评分,因此 0 将是最常见的值,并且余弦相似度函数可以在内部使用稀疏矩阵来加快计算速度。稀疏矩阵捷径是人们首先使用余弦相似度的主要原因。

另一方面,如果算法将 0 解释为更接近于 1 而不是 2,它将放弃您的建议。您确实需要有意忽略这些,但您可以在余弦相似度实现中轻松地这样做,而不是过滤应用之前的数据。

考虑如何计算余弦相似度

余弦相似度取两个实向量的点积,并将该值除以它们的大小的乘积。通过欧几里得点积恒等式,这等于两个向量之间夹角的余弦。其结果是一个介于 1 和 -1 之间的值。

当值为 1 时,这些向量指向完全相同的方向。当值为 -1 时,向量指向完全相反的方向(一个是另一个的否定)。当值为 0 时,向量相互垂直;换句话说,当值为零时,这两个向量在特征空间中尽可能不相似。

点积是两个向量的所有元素乘积的总和。这些数字越大,它们对余弦相似度的贡献就越大。

现在,获取向量中的任何特征。第五,说。如果您在其中一个向量中将其设置为零,则两个向量的元素乘积中的第五个元素也将为零,而不管其在另一个向量中的值如何。当您将所有这些元素乘积相加时,第五个元素不会对求和产生任何影响。因此,将特征向量中的值设置为零意味着它不会对余弦相似度做出任何贡献。

这就是为什么将特征向量中的值设置为零,就相当于在计算余弦相似度时不包括该特征,并且不会扭曲余弦相似度。