一、协同过滤基本思想
举个例子,某天你想去看电影,但又不知道看哪部,想请朋友推荐,大部分会倾向于去问与自己有相同偏好的朋友,因为这类朋友推荐的电影很大可能性你也 会喜欢。协同过滤就是基于这种思想,偏好相似的用户喜欢的物品或内容也是相似的。该推荐算法是基于用户对物品的偏好信息,衡量用户之间的相似性或物品之间 的相似性,然后进行推荐,将相似用户喜欢的物品推荐给当前用户,或基于当前用户的喜好将相似物品推荐给用户。以上这两种就是常见的基于用户的协同过滤和基 于物品的协同过滤。
二、常用的距离度量
如何衡量用户之间、物品之间的相似性呢?我们用距离来刻画相似性,距离越小,说明相似性越高,距离越大,说明相似性越低。常用的距离度量有欧式距离、余弦距离等。
由于距离在很多算法中均会用到,比如分类算法、聚类算法等,我们会有个专门的章节来介绍距离度量。
三、基于用户的协同过滤
我们以上图为例来简要说明基于用户的协同过滤是如何工作的。用户A偏好物品A,用户B偏好物品A、B、C,用户C偏好物品B、C,我们将其转换为以下的表格:
用户物品A物品B物品C
用户A100
用户B111
用户C011
假设我们要对用户C进行推荐,基于欧式距离,计算用户C与用户A、用户B的距离(每一行代表一个用户的偏好信息),发现用户C与用户B的距离最小,相似度最高,说明他们的偏好比较一致,可将用户B偏好的而用户C还没有偏好的物品A推荐给用户C。
四、基于物品的协同过滤
接下来我们以上图为例来简要说明基于物品的协同过滤是如何工作的。用户A偏好物品A,用户B偏好物品B、物品C,用户C偏好物品C,同样地,我们将其转为表格形式:
用户物品A物品B物品C
用户A100
用户B011
用户C001
假设我们想推荐物品B,基于欧式距离计算物品B与物品A、物品C之间的距离(每一列代表一个物品的信息),发现物品B与物品C的距离最小,相似性最高,说明物品B、C比较相似,可能是同类产品,我们可将物品B推荐给喜欢物品C却还没对物品B表示出偏好的用户C。
五、协同过滤的基本步骤
STEP1 : 收集数据
收集用户对物品的偏好信息,主要包含以下内容:
显式的用户反馈:用户在浏览、使用网站以外,显式提供的反馈信息,比如用户对物品的评分、评论等;
隐式的用户反馈:用户在浏览、使用网站时产生的数据,隐式地反映了用户的偏好,比如订购信息、浏览信息等;
用户表达偏好的方式有很多种,不同应用也是大不相同的。比如对文章的转发、收藏,对活动的投票等也是显式的偏好反馈,用户浏览网站时停留时间也是一种隐式的反馈,不过这一个指标的噪声较大。
STEP2 : 数据预处理
如何整合显式、隐式的偏好反馈信息呢?有以下两种方法。
分组:显式反馈为一组,隐式反馈为一组,然后基于不同的行为组别分别计算用户之间或物品之间的相似度;亚马逊上在商品详情页进行推荐时一般都会有‘购买此商品的顾客也同时购买’和‘看过此商品后顾客买的其他商品’这两种方式的推荐;
加权:根据不同行为反映的偏好程度进行加权,显式反馈的权重大,隐式权重小,得到用户对物品的总体偏好;
整合后如何进行数据预处理呢?
减噪:这些偏好反馈信息可能会存在大量的噪声,可应用常用的减噪算法进行清洗,或作离群点识别等;
归一化: 不同偏好行为对应的数据的量纲会有很大的差别,需统一量纲;
聚类:在用户数或物品数很大的情况下,可先对用户和物品进行聚类,形成用户群和物品群,将单个用户对单个物品的偏好转换为某个用户群对某个物品群的偏好,可降低整个推荐算法的计算量,当然推荐精度也会受影响;
STEP3 : 最近邻搜索
基于用户的协同过滤:计算用户之间的相似性,找到与当前用户最相似的N个用户,如果在数据预处理中进行了聚类,就计算用户群之间的相似性,找到最邻近的N个用户群;
基于物品的协调过滤:计算物品之间的相似性,找到与当前物品最相似的N个物品,同样的,如果进行了聚类,就计算物品群之间的相似性,找到最邻近的N个物品群;
STEP4 : 进行推荐
基于用户的协同过滤:将最近邻用户(群)中出现频次较高并且还未出现在当前用户偏好列表中的物品推荐给当前用户;
基于物品的协同过滤:根据当前用户的偏好列表,将最相似的物品推荐给用户;
六、应用场景
基于用户的协调过滤和基于物品的协调过滤都能达到不错的效果,但在应用场景上会存在一定的区别。如果一个电商网站,用户的数量远超物品的数量, 同时物品信息相对稳定,在这种情况下基于物品的协同过滤算法更合适,不仅计算量小,而且不用频繁更新;如果是一个新闻或者是博客网站,内容数据偏多且不断 更新,这时候可采用基于用户的协同过滤。从计算的复杂度来讲,这两个算法各有优势,我们要根据不同系统的各自特点去选择。