推荐系统的几种常见模型概述

网上对个性化推荐的介绍很零散,我正好作过相关的工做,因此这里作个总结。算法

总的来讲,推荐系统的目标能够分为预测评分和物品推荐两种,其实模型也可相互转换,目前对前者的研究也更多,由于前者更适合建复杂的模型,因此这里只讨论预测评分的状况。推荐系统中经常使用的数据有如下几种:网络

1. 基于内容的推荐学习

要预测一个用户未来的行为,最直观的想法固然是看看他过去干了些什么,看了哪些电影啊,打多少分啊,听过什么歌啊,之类的。基于内容推荐的基本思想就是,你过去曾经买过什么东西、看过什么电影,我就给你推荐同样的东西或者相似的东西,显然这样的模型太直接,没有挖掘出数据背后隐含的内涵,只用这样简单的推荐确定达不到最好的效果,因此咱们须要有协同过滤。大数据

 

2. 协同过滤spa

协同过滤能够分为两种模型,一种叫KNN,用户最近邻模型,一种是Matrix Factorization,矩阵分解模型。KNN又有两种基本作法:一是找出与用户u最相似的K个用户,譬如若是咱们想要预测u对电影i的评分,咱们能够找出其余K个对电影i评过度的用户,而后分别计算他们与用户u的类似性,而后把他们对i的评分进行加权之后,做为用户u对i的评分。计算用户之间的类似性有不少方法,最经常使用的是余弦类似系数和皮尔森类似系数,都是将每个用户的评分状况做为一个向量之后计算两个向量之间的余弦夹角或皮尔森系数。其中皮尔森系数其实就是一种减掉了平均值的方法,理论上更能贴近实际状况,更可靠。这是基于用户的推荐,基于物品的推荐也是一个道理,譬如咱们要预测用户u对物品i的评分,咱们找出用户u评过度的其余K个的物品,用一样的办法加权后获得u对i的预测值。基于用户和基于物品能够结合起来作推荐,有人专门作过这个研究,譬如把二者的结果分别乘一个加权系数之后相加,而后再学习出两个系数的合适的值。设计

KNN的作法比较简单也很容易想到,因此天然须要一种更复杂的办法来改进系统。Matrix Factorization的想法来自于SVD,即奇异值分解(singular value decomposition)。奇异值分解的概念网上随便搜一搜就有不少,搞统计的还有搞模式识别的人成天就研究这些东西。SVD只是分解矩阵的其中一种方法,譬如特征值分解通常线性代数课上都讲过,简单地说就是把一个M*N的矩阵分解成M*M、M*N、N*N三个矩阵的乘积,而后中间那个M*N的矩阵中就包含了奇异值,也就表明了这个矩阵不同凡响的一些地方。数据分析

SVD有许多办法能够算出来,但在推荐系统中奇异值不是直接计算出来的,通常都是经过随机梯度降低学习出来的。这就好像你在推荐系统须要作直线拟合的时候也不会直接去算,而是进行迭代。矩阵分解出来的奇异值理论上是不可解释的。假若有u个用户和i个物品,这样评分矩阵就是一个u*i的矩阵,假设通过分解以后,有u*f和i*f这样两个矩阵,就是说分解出来了一个长度为f的向量,拿电影来打比方,譬如用户有三个:张3、李4、王二,电影也有三个:《拯救大兵瑞恩》、《了不得的盖茨比》、《霍比特人》、这样分解出来的向量可能具备的意义就是:二战、斯皮尔伯格、小资、三角恋、奇幻、中世纪,这样f就为6,u*f的矩阵就是表示用户对这些标签的感冒程度,i*f的矩阵则表示电影对这些标签的拥有程度,譬如u*f中张三的那一行是(0.9,0.5,0.2,0.2,0.4,0.3),咱们就能够知道张三最喜欢战争片,而不太喜欢小资爱情片,假如这时候有一部新的电影new movie的向量为(0.4,0.3,0.5,0.6,0.7,0.5),那么张三对这个new movie的评分就能够预测为两个向量的内积。数学

在不少论文中,分解出来的向量的信息被称为隐含向量(latent factor),前面的KNN模型就没有考虑到latent factor的影响,这也是KNN和Matrix Factorization模型最重要的区别。it

除此以外,实际的推荐系统中还会考虑到偏见的影响,又称为基准偏移量,因此又有一个baseline模型。譬若有的用户很苛刻,倾向于给电影评分评低1分。有的电影口碑很差,譬如《小时代》,就容易被人故意评低几分。因此咱们须要创建两个向量,一个存放每一个用户的偏见分数,一个存放每一个电影的偏见分数。这样就消除了偏见的影响。举个例子,譬如全部电影的评分的均值是3.5分(5分是满分),电影《小时代》倾向于被人评低2分,而用户小花评分不负责,老是评分多出均值1.5分,那咱们对小花对《小时代》的评分预测就是3.5-2+1.5=2.5分。在实际算法中,两个偏移矩阵也是经过随机梯度降低学习出来。io

到此,协同过滤的方法已经有三种了:矩阵分解、用户最近邻、基准偏移。

 

3. 基于社交网络的推荐

在真实的推荐系统中咱们能获得的信息每每不止用户的评分信息,通常还有写别的的属性信息,譬如用户的填写的我的资料之类的。一种利用这些属性信息的办法就是在异质网络中进行推荐。譬如要看用户u对电影i的评分,能够找出用户u的好友们对i的评分,用这些评分再来预测u对i的评分。创建用户和项目之间的联系须要引入元路径的概念,譬如一种将用户u和电影i相连的方式就是u-u的朋友-i,这就能够看作一条路径,其余的路径还有用户-电影i-电影类型-电影j之类的。我本身的毕业设计作的就是这个,不过模型比较简单,挑选了5条元路径,每条路径上都是KNN推荐,最后的结果很是可观,完爆前面所说的其余算法。这说明在大数据分析中,数据量才是重点,挖空心思去研究数据背后的数学理论的结果远不如多整合点数据。

 

4. 结语

真正的推荐系统中每每都是结合了多种方法,而后再加上些抖机灵的办法。

相关文章
相关标签/搜索