网上对个性化推荐的介绍很零散,我正好做过相关的工作,所以这里做个总结。
总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,其实模型也可相互转换,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这里只讨论预测评分的情况。推荐系统中常用的数据有以下几种:
1. 基于内容的推荐
要预测一个用户将来的行为,最直观的想法当然是看看他过去干了些什么,看了哪些电影啊,打多少分啊,听过什么歌啊,之类的。基于内容推荐的基本思想就是,你过去曾经买过什么东西、看过什么电影,我就给你推荐一样的东西或者类似的东西,显然这样的模型太直接,没有挖掘出数据背后隐含的内涵,只用这样简单的推荐肯定达不到最好的效果,所以我们需要有协同过滤。
2. 协同过滤
协同过滤可以分为两种模型,一种叫KNN,用户最近邻模型,一种是Matrix Factorization,矩阵分解模型。KNN又有两种基本做法:一是找出与用户u最类似的K个用户,譬如如果我们想要预测u对电影i的评分,我们可以找出其他K个对电影i评过分的用户,然后分别计算他们与用户u的相似性,然后把他们对i的评分进行加权以后,作为用户u对i的评分。计算用户之间的相似性有很多方法,最常用的是余弦相似系数和皮尔森相似系数,都是将每一个用户的评分情况作为一个向量以后计算两个向量之间的余弦夹角或皮尔森系数。其中皮尔森系数其实就是一种减掉了平均值的方法,理论上更能贴近实际情况,更可靠。这是基于用户的推荐,基于物品的推荐也是一个道理,譬如我们要预测用户u对物品i的评分,我们找出用户u评过分的其他K个的物品,用同样的办法加权后得到u对i的预测值。基于用户和基于物品可以结合起来做推荐,有人专门做过这个研究,譬如把两者的结果分别乘一个加权系数以后相加,然后再