协同过滤

什么是协同过滤 (Collaborative Filtering, 简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

  协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题:如何确定一个用户是不是和你有相似的品位?如何将邻居们的喜好组织成一个排序的目录?

计算步骤

1.收集用户偏好。
2.找到相似的用户或物品。
3.计算推荐。

找到相似的用户或物品

相似度计算

最典型的 CF 的两个分支:基于用户的CF和基于物品的CF。这两种方法都需要计算相似度。
关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大,最简单的是欧几里德距离计算。

基于用户的协同过滤算法主要包括两个步骤:
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

基于物品的协同过滤算法主要包括两步:
(1)计算物品之间的相似度。
(2)根据物品的相似度和用户的历史行为给用户生成推荐列表。

相似邻居的计算

可以使用K近邻算法。

优缺点

基于用户的CF和基于物品的CF,在使用中主要依靠用户/物品的数量及场景进行选择。
协同过滤存在冷启动的问题。