协同过滤基础

转自:http://superangevil.wordpress.com/2010/03/16/basic_collaborative_filtering/

特别详细的资料

推荐系统中,协同过滤(Collaborative Filtering)技术已经获得了相当广泛的成功,最著名的就是Amazon,这里就不多说了。虽然是互联网上迟到的80后,但我们还是有热情去在互联网的舞台上脚踏实地的去拼搏、去奋斗。说到“脚踏实地”,一直以为CF没啥,现在觉得还是应该踏踏实实把它记录下来,算是对自己的积淀吧。

Web2.0时代都讲求“集体智慧”(collective intelligence),首先是韩信将兵多多益善,而后再聚合、分类、过滤、预测、推荐、……。CF简单来说就是利用与使用者兴趣( interest )相投、品味( taste )相同的群体的喜好来对使用者产生他所”可能”感兴趣的信息。互联网上一个个个体透过一种合作机制(比如豆瓣的书影音平台)对某特定信息给予相当程度的回应(写书评、影评,评分等),这些信息可以用以帮助他人筛选信息。通常做法是: (1) 对一大群人进行搜索,并从中找出与使用者品味相近的一小群人; (2) 对这小群人喜好的其他内容进行考察,并将它们组合起来构造一个经过排名的推荐列表。CF最大特点是它并不利用content信息,仅仅利用user-item矩阵的链接关系就能产生预测。下面记录一下最基本的两种基于kNN的方法: User-Based CF, Item-Based CF(关于它们之间的比较就不说了,几篇经典的CF论文都讲了)。

0. 数据准备: 阶user-item关系的rating矩阵:  — 行代表user,列代表item

1. User-Based Collaborative Filtering

STEP1. 对user u,计算u与其他每个user v的相似度:

为user u和user v都打过分的items集合

,  
表示user u对中items打分的均值;  表示user v对中items打分的均值。
此种度量方式实际上是调整后的cosine相似度(还有很多相似度度量方式,比如Euclidean Distance, Pearson Correlation等等,具体选用哪种相似度度量方式,要根据具体应用和数据的具体特点而定)。

STEP2. 这样,对user u,就找到了u与其他用户的相似度度量,根据相似度排序,取top-k个用户(kNN过程—找到了k个最近邻):
为排好序的与user u最近似的k个最近邻,相应的相似度为
此步的一个直接结果就是找到了相似用户

STEP3. 预测user u对item i的喜欢程度:
为对item i打过分的users集合


用相似kNN且对item i打过分的用户对item i评分的加权平均作为user u对item i喜欢程度的预测,这就找到了user u对其未关注过的item i的 可能喜欢程度 ;对u所有未打过分的items都进行一下预测,就找出了一个user u未关注过的items的预测列表,对其按照预测值进行排序,就给出了一个user u可能喜欢的N个items(有序),这就是典型的 “您可能喜欢” 形态 :)

2. Item-Based Collaborative Filtering

STEP1. 对任意两个item i, j,计算它们之间的相似度:

为对item i和item j都打过分的users集合

   
表示 中的users对item i打分的均值; 表示 中的users对item j打分的均值。
此种度量方式仍是调整后的cosine相似度,不再赘述。
[注] 此步骤的最大特点是相比与users,items相对是静态、变化较少的, item-item相似对可以预先offline计算 — 相比于user-based方法,这是一个极大的优势。

STEP2. 对任意item i,根据相似度排序,获得k个最相似items(kNN):
为排好序的与item i最近似的k个最近邻,相应的相似度为

此步的直接结果是找到了相似物品

STEP3. 预测user u对item i的喜欢程度:
为user u打过分的items集合

用user u打过分且在item i相似kNN的items集中打分的加权凭据作为u对i喜欢程度的预测,同样找到user u对起未关注国的item i的可能喜欢程度;对u所有未打分的items都这样作,就形成了一个预测列表,排序后给出推荐列表


在 User-based 方法中,随着用户数量的不断增多,在大数量级的用户范围内进行“最近邻搜索”会成为整个算法的瓶颈。 

Item-based 方法通过计算项之间的相似性来代替用户之间的相似性。对于项来讲,它们之间的相似性要稳定很多,因此可以离线完成工作量最大的相似性计算步骤,从而大大降低了在线计算量,提高推荐效率


以上就是最基本的基于kNN的CF过程,当然,通过交叉验证可以评测我们的相似度函数选择怎么样,最重要的,还是 根据具体应用和数据本身的特点选择和设计合适的相似度度量函数;另外,对于数据features的多方面考虑可以有更复杂的模型(如SVD, RBM等等),对预测进行进一步的精确与细化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值