0

举个例子,假设我有一个非常简单的数据集。我给了一个csv三列,user_id,book_id,rating。评分可以是0-5的任何数字,其中0表示用户具有而不是评价该书。正确解释余弦角距离相似度和欧几里得距离相似度

比方说,我随机挑三个用户,我得到这些功能/评级向量。

马丁:< 3,3,5,1,2,3,2,2,5>

雅各布:< 3,3,5,0,0,0,0,0,0>

格兰特:< 1,1,1,2,2,2,2,2,2>

相似度计算:

+--------------+---------+---------+----------+ | | M & J | M & G | J & G | +--------------+---------+---------+----------+ | Euclidean | 6.85 | 5.91 | 6.92 | +--------------+---------+---------+----------+ | Cosine | .69 | .83 | .32 | +--------------+---------+---------+----------+

现在,我相似的期望是,马丁和贾玉米棒将是最相似的。我期待这一点,因为他们对这两本书评价的书籍的评分完全相同。但我们最终发现马丁和格兰特是最相似的。

我从数学上理解我们如何得出这个结论,但我不明白如何依靠余弦角距离或欧几里德距离作为计算相似性的方法,如果发生这种类型的事情。马丁和格兰特比马丁和雅各布更类似的解释是什么?

我以为有一个想法就是计算欧几里德距离,但忽略一个用户没有评价过该书的所有书籍。

我然后用这个

+--------------+---------+---------+----------+ | | M & J | M & G | J & G | +--------------+---------+---------+----------+ | Euclidean | 0 | 5.91 | 6.92 | +--------------+---------+---------+----------+ | Cosine | .69 | .83 | .32 | +--------------+---------+---------+----------+

当然我现在有0欧几里得距离,这符合我期望的推荐系统的结束。我看到很多教程和讲座都使用余弦角度距离来忽略未分级的书籍,而不是使用欧几里德并忽略它们,所以我认为这一般不会工作。

编辑:

只是尝试了一下,我调整雅各布的特征向量更加相似:

雅各布:< 3,3,5,1,2,3,2,0, 0>

当我计算与马丁的余弦角距离时,我仍然只得到.82!与马丁和格兰特相比,仍然不那么相似,但通过检查,我预计这两者会非常相似。

有人可以帮助解释我的思维错误,并可能提出另一种相似性措施吗?

回答

1

正如你所注意到的那样,欧几里得和余弦角是基于距离的。举例来说,3到5之间的距离比3到0之间的距离小得多,在Jacob的评分中有多个零,你不会在Jacob和Martin之间得到很多相似之处。 你的例子的主要问题是,你认为0表示没有评分,其实它的两个公式被解释为评分0(这是可能的最低评分)如果你会跳过零评分并且仅比较用户他们有共同的评分比马林和雅各布有相似的1!

0

您的想法是正确的,但是您的代码可能会错误地计算余弦相似度。

克里斯已经给了你一个正确的答案,但我想指出,当你计算余弦相似度时,你没有跳过那些未评分的项目。我们可以看到,第一个和第二个表的余弦相似度完全相同。这可能是您的代码中的一个错误。