最近百度有一个推荐系统算法创新大赛,由于我的研究生课题是和推荐系统相关的,所以做实验就比较方便简单。身边有一些人会问到我一些关于推荐的方法,就想要总结一个推荐系统的编写入门,也算是对自己知识的检验吧。中间有很多引用,会给出链接供大家参考。
总体来说,目前我比较熟悉的推荐算法是协同过滤(Collabrative Filter)算法,而协同过滤算法包括基于用户的CF和基于物品的CF。而本文将基于用户的CF算法给大家进行一下科普。
基于用户的协同过滤算法,基于如下假设:对于用户u,和用户u有相同兴趣的用户喜欢的物品,u也比较喜欢。如此,就可以将推荐算法分为两个步骤:
(1). 找到与用户兴趣相似的用户(邻居)集合。
(2). 根据这个集合中的用户喜欢的,且目标用户没有看过的的物品推荐给目标用户。
步骤明确了,然后就可以做实验了。
拿百度这次比赛给的数据集为例子,我将具体说一下算法的流程。
百度的最终目的是用户给没听过的部分项目打分,提供的数据格式为:‘userid’ ‘itemid’ ?。这里面“?”是由算法给出来的,范围是1到5,数字越大表示用户越喜欢该项目。
按照上面所说的步骤,给定一个用户userid,首先照出与该用户相似的用户集合。相似性如何进行评价,有不同的评价标准,我们这里使用 Pearson 相关系数计算用户相似度。评价公式为:
上述公式的计算依赖于数据集中的训练集,此次百度数据集中的训练集给定的是如下格式:userid itemid rating。根据这些数据,我们就可以计算出任意两个用户之间的相似度。根据相似度大小,我们可以得到和目标用户u最相关的N个用户,用这些用户对目标项目的打分形成目标用户对目标项目的最终打分,打分公式为:
注意,上述公示中的预测评分公式的分母可以适当的进行一下修正,不然容易出现比较大的打分值。最后打分有可能超过5,可以将超过五的打分统一赋值为五。
References
1. 项亮: 推荐系统实践 2012
2. zh's note http://blog.csdn.net/wuzh670/