现在广泛使用的比较多的推荐算法包括基于内容的推荐算法,基于协同过滤的推荐算法以及基于图形的推荐算法、基于融合的推荐算法等。下面讲的是基于协同过滤的推荐。
什么叫协同过滤?
- 协同过滤(Collaborative Filtering)字面上的解释就是在别人的帮助下来过滤筛选,协同过滤一般是在海量的用户中发现一小部分和你品味比较相近的,在协同过滤中,这些用户称为邻居,然后根据他们喜欢的东西组织成一个排序的目录来推荐给你。问题的重点就是怎样去寻找和你比较相似的用户,怎么将那些邻居的喜好组织成一个排序的目录给你,要实现一个协同过滤的系统,需要以下几个步骤: 1.收集用户的爱好 2.找到相似的用户或者物品 3.计算推荐。
基于协同过滤的推荐可以分为以下三类:
- 基于用户的推荐User-based Recommendation
- 基于项目的推荐Item-based Recommendation
- 基于模型的推荐Model-based Recommendation
1.基于用户的协同过滤推荐
基本原理:基于用户的协同过滤推荐,它是以用户为中心。根据所有用户对物品的喜好,发现与当前用户喜好相似的“邻居”用户群,一般在应用中是采用计算“K-邻居”的算法,然后基于这K个邻居的历史偏好信息,为当前用户进行推荐。
下面假设:
用户A:喜欢物品A 喜欢物品B
用户B:喜欢物品C
用户C:喜欢物品A 喜欢物品B 喜欢物品D
这时,我们就会发现用户A和用户C的喜好相似,此时我们就可以把物品D推荐给用户A。
优点:(1)它通过对用户与用户的分析从而对用户进行分类,所得到的结果较为精确。(2)随着用户的使用,系统推荐会越来越精确。
缺点:(1)有的时候因为有太多物品,很难找到相似的用户。(2)新用户或者新物品存在“冷启动”的问题。(3)有些用户的喜好与任何一类都不同时,很难进行推荐。
2.基于项目的协同过滤推荐
基本原理:它也是根据用户对物品的偏好(Preference)信息,发掘不同物品之间的相似性。基于物品的协同过滤推荐,是以物品为中心,通过观察用户对物品的偏好行为,将相似的物品计算出来,可以认为这些相似的物品属于特定的一组类别,然后根据某个用户的历史兴趣计算其所属的类别,然后看该类别是否属于这些成组类别中的一个,最后将属于成组类别所对应的物品推荐给该用户。
下面假设:
用户A:喜欢物品A 喜欢物品C
用户B:喜欢物品A 喜欢物品B 喜欢物品C
用户C:喜欢物品A
这时,从这些用户的历史喜好可以分析出物品A和物品C时比较类似的,喜欢物品A的人都喜欢物品C,基于这个数据可以推断用户C很有可能也喜欢物品C,所以系统会将物品C推荐给用户C。
同时协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?其实基于项目的协同过滤推荐机制是 Amazon 在基于用户的机制上改良的一种策略,因为在大部分的 Web 站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于项目的机制比基于用户的实时性更好一些。但也不是所有的场景都是这样的情况,可以设想一下在一些新闻推荐系统中,也许物品,也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的形似度依然不稳定。所以,其实可以看出,推荐策略的选择其实和具体的应用场景有很大的关系。
3.基于模型的协同过滤推荐
基本原理:基于模型的协同过滤推荐,是采用机器学习的方法,通过离线计算实现推荐的,通常它会首先根据历史数据,将数据集分成训练集和测试集两个数据集,使用训练集进行训练生成推荐模型,然后将推荐模型应用到测试集上,评估模型的优劣,如果模型到达实际所需要的精度,最后可以使用训练得到的推荐模型进行推荐(预测)。可见,这种方法使用离线的历史数据,进行模型训练和评估,需要耗费较长的时间,依赖于实际的数据集规模、机器学习算法计算复杂度。
去更远的地方 见更亮的光