协同过滤的本质其实就是向量间的相似度计算,例如欧氏距离和cosine相似度等。
UserCF
UserCF基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。
ItemCF
基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。
问题:
这个算法实现起来也比较简单,但是在实际应用中有时候也会有问题的。
比如一些非常流行的商品可能很多人都喜欢,或者类似工具书这种通用性太强的东西,再推荐就没什么意义了,所以计算的时候需要对这种商品加一个惩罚系数或者把这种商品从备选中去掉。