基于物品的协同过滤算法主要分为两步。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表
用下面的公式定义物品的相似度:
![](https://img.haomeiwen.com/i12527824/19d9c7df99a08d21.png)
分母 |N(i)| 是喜欢物品 i 的用户数,而分子|N(i)∩N(j)|是同时喜欢物品 i 和物品 j 的用户数。因此,上述公式可以理解为喜欢物品 i 的用户中有多少比例的用户也喜欢物品 j 。
如果物品 j 很热门,很多人都喜欢,那么 W ij 就会很大,接近 1 。为了避免推荐出热门的物品,可以用下面的公式:
![](https://img.haomeiwen.com/i12527824/ccf554138ef3a643.png)
这个公式惩罚了物品 j 的权重,因此减轻了热门物品会和很多物品相似的可能性。
和 UserCF 算法类似,用 ItemCF 算法计算物品相似度时也可以首先建立用户 — 物品倒排表(即对每个用户建立一个包含他喜欢的物品的列表),然后对于每个用户,将他物品列表中的物品两两在共现矩阵 C 中加 1 。详细代码如下所示:
![](https://img.haomeiwen.com/i12527824/5a24548b9c71df85.png)
图中最左边是输入的用户行为记录,每一行代表一个用户感兴趣的物品集合。然后,对于每个物品集合,我们将里面的物品两两加一,得到一个矩阵。最终将这些矩阵相加得到上面的 C 矩阵。其中 C[i][j] 记录了同时喜欢物品 i和物品 j 的用户数。最后,将 C 矩阵归一化可以得到物品之间的余弦相似度矩阵 W 。
![](https://img.haomeiwen.com/i12527824/1f13d3ff73e46112.png)
在得到物品之间的相似度后,ItemCF通过如下公式计算用户u对一个物品j的兴趣
![](https://img.haomeiwen.com/i12527824/62bfdf5cfdde6227.png)
这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,w ji 是物品j和i的相似度,r ui 是用户u对物品i的兴趣。(对于隐反馈数据集,如果用户u对物品i有过行为,即可令r ui =1。)该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。该公式的实现代码如下所示。
![](https://img.haomeiwen.com/i12527824/5d7abe02e02ac342.png)
网友评论