协同过滤简解

##协同过滤算法
Collaborative Filtering
基于一组兴趣相同的用户进行推荐。协同过滤基于这样的假设:为用户找到他真正感兴趣的内容的好方法是,首先找他与他兴趣相似的用户,然后将这些用户感兴趣的内容推荐给此用户

协同过滤技术可以分为三类:
基于用户(User-based)的协同过滤;
基于项目(Item-based)的协同过滤;
基于模型(Model-based)的协同过滤

步骤一,收集可以代表用户兴趣的信息。
如传统的打分的方式,豆瓣上的“我来评价”之类也是这种方法。这种方式被称为“显式评分”方法。其缺点是,收集数据比较困难,用户通常并不愿意费力气为你贡献这种数据。这导致这种系统通常更多出现在实验室或者论文里面。在实际的商业系统中,即使使用了这种方法,也多会被包装为一种更加有好如游戏方式。
另外一种被认为更有效的方法是“隐式评分”方法。这种方法不需要用户直接输入评价数据,而是根据用户的行为特征由系统代替用户完成评价。一种研究得比较多的方法是 Web Mining 。电子商务网站在隐式评分的数据获取上有先天的优势,用户购买的商品记录是非常有用的数据。

步骤二,最近邻搜索。
协同过滤的出发点是与你兴趣相同的一组用户,术语叫做“最近邻”。最近邻搜索的核心是计算两个用户的相似度。例如用户A和用户B,首先需要获取用户A和用户B所有的评分项,然后选择一个合适的相似度计算方法,基于评分项数据,计算得到用户A和用户B的相似度数值。
目前使用比较多的相似度算法包括,皮尔森相关系数(Person Correlation Coefficient)、余弦相似性(Cosine-based Similarity)以及调整余弦相似性(Adjusted Consine Similarity)

步骤三,生成推荐结果。
有了最近邻集合,就可以对目标用户的兴趣进行预测,生成推荐结果。通常根据推荐目的的不同,可以进行多种形式的推荐。最常见的推荐结果有两种,Top-N 推荐和关联推荐。
Top-N 推荐,这里的 Top-N 和一般网站(比如 digg)上见到的“最热门”列表是不同的。热门列表是基于全部数据集产生的,它对每个人都是一样的;Top-N 推荐是针对单个用户产生的,它对每个人是不一样的:通过对你的最近邻用户进行统计,选择出现频率最高且在你的评分项目中不存在的项目作为推荐结果。豆瓣上的“排行”栏目,应该是传统的“热门”列表,不是 Top-N 推荐。
关联推荐,也称为基于关联规则的推荐。与传统关联规则针对全部数据进行挖掘不同的是,此方法仅对最近邻用户的购买记录进行关联规则挖掘。如果你曾经购买过关联规则左边的商品,而没有购买过关联规则右边的商品,那么就把右边的这个商品推荐给你。它最突出的优点就是,可以帮助你发现你感兴趣的而以前却从来没有注意过的商品。在 Amazon 介绍书的详细信息的页面上,可以看到这种推荐的一个实际应用。例如在《The Search》的页面上,Amazon 给我的推荐是,