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

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的。

这个只是概论,以后有时间再加上具体的模型、算法。

-----------------------------------------------------------------------------

总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这里只讨论预测评分的情况。现在主流推荐方法可分为协调过滤和基于内容的推荐,前者是重点,先说后者,基于内容推荐就是说,你过去曾经买过什么东西、看过什么电影,我就给你推荐一样的东西或者类似的东西,显然这样的模型太简单,只用这样简单的推荐肯定达不到最好的效果,所以我们需要有协调过滤。

协同过滤可以分为两种模型,一种叫KNN,用户最近邻模型,一种是Matrix Factorization,矩阵分解模型。KNN又有两种基本做法:一是找出与用户u最类似的K个用户,譬如如果我们想要预测u对电影i的评分,我们可以找出其他K个对电影i评过分的用户,然后分别计算他们与用户u的相似性,然后把他们对i的评分进行加权以后,作为用户u对i的评分。计算用户之间的相似性有很多方法,最常用的是余弦相似系数和皮尔森相似系数,都是将每一个用户的评分情况作为一个向量以后计算两个向量之间的余弦夹角或皮尔森系数。其中皮尔森系数其实就是一种减掉了平均值的方法,理论上更能贴近实际情况,更可靠。这是基于用户的推荐,基于物品的推荐也是一个道理,譬如我们要预测用户u对物品i的评分,我们找出用户u评过分的其他K个的物品,用同样的办法加权后得到u对i的预测值。

一般来说,KNN模型中基于用户和基于物品都要同时考虑,有人专门做过这个研究,参考论文:[Tag-aware Recommender Systems by Fusion of Collaborative Filtering Algorithms]

他的做法是把两者的结果分别乘一个加权系数以后相加,然后用机器学习的算法学习出两个系数的合适的值。

KNN的做法比较简单也很容易想到,所以自然需要一种更复杂的办法来改进系统。Matrix Factorization的想法来自于SVD,即奇异值分解(singular value decomposition)。在线性代数中我们知道,描述一个普通的矩阵呢的重要特可以通过特征值分解、奇异值分解等,其中特征值分解有点局限——只能用于方阵。但奇异值的计算是一个难题,是一个O(N^3)的算法。在单机的情况下当然是没问题的,matlab在一秒钟内就可以算出1000 * 1000的矩阵的所有奇异值,但是当矩阵的规模增长的时候,计算的复杂度呈3次方增长,就需要并行计算参与了。Google的吴军老师在数学之美系列谈到SVD的时候,说起Google实现了SVD的并行化算法,说这是对人类的一个贡献,但是也没有给出具体的计算规模。

其实SVD还是可以用并行的方式去实现的,在解大规模的矩阵的时候,一般使用迭代的方法,当矩阵的规模很大(比如说上亿)的时候,迭代的次数也可能会上亿次,如果使用Map-Reduce框架去解,则每次Map-Reduce完成的时候,都会涉及到写文件、读文件的操作。个人猜测Google云计算体系中除了Map-Reduce以外应该还有类似于MPI的计算模型,也就是节点之间是保持通信,数据是常驻在内存中的,这种计算模型比Map-Reduce在解决迭代次数非常多的时候,要快了很多倍。Lanczos迭代就是一种解对称方阵部分特征值的方法,是将一个对称的方程化为一个三对角矩阵再进行求解。按网上的一些文献来看,Google应该是用这种方法去做的奇异值分解的。SVD在MF中的具体应用可以参考这篇论文:[A Guide to Singular Value Decomposition]

在具体的Matrix Factorization中,奇异值不是直接计算出来的,一般都是通过随机梯度下降学习出来的。现在看矩阵分解分解的意义,尽管这个东西其实是不可解释的。假如有u个用户和i个物品,这样评分矩阵就是一个u*i的矩阵,假设经过分解之后,有u*f和i*f这样两个矩阵,就是说分解出来了一个长度为f的向量,拿电影来打比方,譬如用户有三个:张三、李四、王二,电影也有三个:《拯救大兵瑞恩》、《了不起的盖茨比》、《霍比特人》、这样分解出来的向量可能具有的意义就是:二战、斯皮尔伯格、小资、三角恋、奇幻、中世纪,这样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模型最重要的区别。

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

到此,协同过滤的方法已经有三种了:矩阵分解、用户最近邻、基准偏移,模型都是不止一种的,都是多种结合以后产生推荐结果。一般的系统中前两者结合的效果就很不错了,也有的研究结合了三张方法,参见[when SVD++ meets neighbor]

新兴的模型:

新兴的模型其实也是建立在矩阵分解的基础上的,只不过是增加了更多的信息量。现在推荐系统已经无法再在基础模型上做文章,所以只能想办法利用更多的信息。譬如推荐的时候通过考虑用户的职业、用户给自己贴的标签、电影的标签等,调查显示80%的用户不介意公开不敏感信息。于是就有人把标签也考虑进了系统中,参见论文:[Tag-aware Recommender Systems by Fusion of Collaborative Filtering Algorithms]。

还有就是进行物品推荐时,不止是给用户推荐物品,而且也顺带上用户的简介、用户可能感兴趣的电影的演员,等等办法。

物品推荐的模型和评分预测的模型有些不同了,很多用到了朴素贝叶斯个性化排序或改进的朴素贝叶斯个性化排序,这里不再赘述,可参加论文:[BPR: Bayesian Personalized Ranking from Implicit Feedback]

推荐系统的几种常见模型概述,布布扣,bubuko.com

时间: 2024-10-12 16:18:38

推荐系统的几种常见模型概述的相关文章

CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系(转)

转自:http://www.cnblogs.com/frontendBY/p/5215785.html 1.UTC: Universal Time Coordinated 协调世界时,又称世界标准时间 多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间.世界统一时间),是经过平均太阳时(以格林威治时间GMT为准).地轴运

最常见的两种防御模型|安全千字文系列2

为了保证系统的机密性.可靠性.稳定性,我们要围绕系统的核心建立一些防御措施,最常见的防御措施模型有两种,分别被描述为棒棒糖和洋葱. 棒棒糖模型 最常见的防御模型被称为便捷安全,也就是围绕有价值的对象建立一个屏障,这个屏障可以是逻辑上的也可以是物理的.很多机构都会选择采用这样的防御模式,比如断绝企业内网与英特网的连接,或者在内外网的交界处放置防火墙,或者有些企业在网络边界上设置认证服务器等. 这样的防御方式,就像一个棒棒糖一样,外层是保护屏障,中心是被保护的信息. 这种模型的好处很明显,就是物料成

网络I/O模型--5种常见的网络I/O模型

阻塞与非阻塞 阻塞就是卡在那儿什么也不做,双方之间也没有信息沟通. 非阻塞就是即使对方不能马上完成请求,双方之间也有信息的沟通. 同步与异步 同步就是一件事件只由一个过程处理完成,不论阻塞与非阻塞,最后完成这个事情的都是同一个过程 异步就是一件事由两个过程完成,前面一个过程通知,后面一个过程接受返回的结果. 异步和事件驱动(multi IO) 异步是指数据准备好并且已经拷贝到用户空间,在通知用户来取数据 事件驱动理解为准备好数据了但是没有拷贝到用户空间,这个时候去通知用户,用户再去取数据,经过拷

HTTP协议和几种常见的状态码

前言:明知山有釜,偏向釜山行-----电影<釜山行> --------------------------------------------------------------------------------------------------------> 今天给大家简单的说一下,http协议以及几种常见的状态码: 一.http协议 概述: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必

Linux下5种IO模型的小结

概述 接触网络编程,我们时常会与各种与IO相关的概念打交道:同步(Synchronous).异步(ASynchronous).阻塞(blocking)和非阻塞(non-blocking).关于概念的区别在知乎上看到一位朋友(链接)打了一个比较形象的比喻: 你打电话问书店老板有没有<分布式系统>这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果).而异步通信机制,书店老板直接告诉你我查一下啊,查好了打

权限系统与RBAC模型概述

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3793894.html 0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBAC这个东西.可惜一直没狠下心来学习. 更详细的RBAC模型非常复杂.本文只做了一些基础的理论性概述.

对几种常见设计模式的理解

 转自:  http://blog.csdn.net/dengpeng0419/article/details/48110841 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 最早提出"设计模式"概念的是建筑设计大师亚力山大Alexander.在1970年他的<建筑的永恒之道>里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现.在<建

聊聊 Linux 中的五种 IO 模型

本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451b5f14bf809aec77dd5df6cff&scene=21#wechat_redirect 上一篇<聊聊同步.异步.阻塞与非阻塞>已经通俗的讲解了,要理解同步.异步.阻塞与非阻塞重要的两个概念点了,没有看过的,建议先看这篇博文理解这两个概念点.在认知上,建立统一的模型.这样,大家在

常见加密算法概述

1.1 对称加密对称加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”.这种加密技术目前被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的“Session Key”长度为56 Bits.对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性.假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用.如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦.对称加密算法