![动手学推荐系统:基于PyTorch的算法实现(微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/826/47216826/b_47216826.jpg)
上QQ阅读APP看书,第一时间看更新
2.2.2 Jaccard相似度
假设用户A喜欢电影1、2和3。用户B喜欢电影1~10。用户C喜欢电影2、3和4。如果仅考虑CN相似度指标,则用户A与用户B的CN相似度为3,用户A与用户C的相似度为2。如此一来用户B对于用户A来讲更相似。
但是直觉告诉我们似乎这样不是很合理,因为用户B喜欢的电影太多了,与其他用户有重叠的部分自然会多,而用户A与C分别仅仅喜欢3部电影,并且在此基础上还有两部电影重叠。似乎用户C相对用户B来讲更应该是用户A的相似用户,所以Jaccard在20世纪初提出的Jaccard指标用于当前场景似乎更加准确。公式如下[1]:
![](https://epubservercos.yuewen.com/50C521/26581360101299306/epubprivate/OEBPS/Images/Figure-P19_10571.jpg?sign=1738898974-34560uVYTZnNR3Qa8DFNN8pR7PBD7zKj-0-e000e7b9a9a434ef9a437a7aeb45a3bd)
由式(2-2)可以看出,Jaccard指标是在CN指标的基础上除以样本间的并集。这样就考虑了样本本身的集合越多,对于相似判断的权重就会越低。
Jaccard相似度的代码如下:
![](https://epubservercos.yuewen.com/50C521/26581360101299306/epubprivate/OEBPS/Images/Figure-P19_11894.jpg?sign=1738898974-ED3Mveu5bCyPXGvr3css749zRdsjcE46-0-67a20e9c8e97b118f14c259c1511d95d)
将上文提到的A、B和C 3种用户数据代入,则可以得到用户A与用户B的Jaccard相似度为0.3,用户A与用户C之间的相似度为0.5,所以用户C与用户A更加相似。
且Jaccard相似度的取值范围为[0,1],越接近1则表示越相似。不需要再做归一化处理。