例如,假设我有一个非常简单的数据集。我得到一个包含三列的 csv,user_id、book_id、评级。评分可以是 0-5 之间的任意数字,其中 0 表示用户尚未对该书评分。
假设我随机挑选了三个用户,我得到了这些特征/评分向量。
马丁:
雅各布:
授予:
相似度计算:
+--------------+---------+---------+----------+
| | 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,这符合我对推荐系统的期望。我看到很多教程和讲座都使用余弦角距离来忽略未评级的书籍,而不是使用欧几里得并忽略它们,所以我相信这在一般情况下一定行不通。
编辑:
只是为了做一点实验,我将 Jacob 的特征向量调整为更加相似:
雅各布:
当我用 Martin 计算余弦角距离时,我仍然只得到 0.82!仍然不如马丁和格兰特相似,但通过检查,我希望这两个非常相似。
有人可以帮助解释我的想法错在哪里,并可能提出另一种相似性度量吗?