协同过滤推荐算法综述和基于内容推荐有什么区别

同济大学图书馆v5.5书目检索系统
把本书分享到
收藏此书的书架
MARC状态:审校 
文献类型:学位论文 浏览次数:20 
题名/责任者:
/鲁培著 刘琴,朱宏明指&#x5
出版发行项:
,2010
ISBN及定价:
/缴送          
载体形态项:
49页:V29cm
并列正题名:
个人责任者:
个人次要责任者:
指&#x5
个人次要责任者:
指&#x5
团体次要责任者:
授予
非控制主题词:
中图法分类号:
学号:0896170027
责任者附注:
培养单位:同济大学软件学院
参考文献:第46-48页
全部MARC细节信息>>
总体评价: (共0人) &&&我的评价:
★ 寒假期间(1月16日——2月23日),预约、委托申请暂停。
TP301.6/LL686-2
软件学院分馆
显示全部馆藏信息
您可能感兴趣的图书(点击查看)
同名作者的其他著作(点击查看)
请输入下面显示的内容【摘要】校园网络安全的主要问题是预防病毒、访问控制、身份验证和加密技术、发现系统安全漏洞并解决等问题。作为一个网络,一方面是网络内部的安全性,一方面是本网络和外部信息网络互联时的安全性。其中内部的安全性要从网络安全技术、网络设备、网络结构、操作系统和…[中图分类号]X1[文献标识码]A[文章编号](52-11一、“污染避难所假说”概述自20世纪70年代以来,环境保护和国家间资本流动之间的关系受到了广泛的关注。然而,与资本流动密切相关的是污染密集型产业转移问题。…【摘要】在很多应用中,需要对完全二叉树结点位置进行调整,使该数据集合具有堆的性质。现经过实验提出一种改进算法,利用优先级队列颇似队列(删除最早的数据)和栈(删除最新的数据)特性转存二叉树结构的结点元素,存储在线性表中。直接调用下滑调整算法操作线性表,…
  【摘 要】随着管理系统的广泛应用,信息数据在飞速增长,一方面人们拥有了海量的信息资源,另一方面人们寻找合适信息的时间成本和难度也增加了。目前广泛采用的信息检索技术只能够向用户提供数量巨大的、缺乏个性化的检索结果。推荐系统是一个由人、计算机软硬件和数据资源共同组成的系统,它把用户对目标对象的使用、评价等相关数据按照特定算法模型进行处理,根据处理的结果形成推荐列表,进而为用户选择决策时提供推荐参考。本文就基于内容过滤的数字图书馆推荐系统展开研究和探讨。   【关键词】内容过滤;数字图书馆;推荐系统   1.基于内容过滤的推荐方法的特点   1.1 基于内容过滤的图书推荐系统的原理   基于内容的推荐系统(Content-based   Recommendation)也被一些学者称为“Fea-   turebased Recommendation”,其技术方法主要源于“信息检索(Information Retrieval,IR)”。最初的基于内容的推荐系统根据用户对内容的偏好,自动检索过滤众多内容,选择一些与用户偏好匹配度高的信息推荐给用户。   基于内容过滤的图书推荐系统根据读者的兴趣向量在图书特征向量中自动寻找与之匹配的产品,并依据相似度的高低顺序,产生推荐图书序列表,进而主动向读者推荐产品。读者兴趣向量主要包括读者的专业、学历、导师等身份信息和历史借阅、查询数据等信息,据此建立读者模型。图书特征向量主要是指经过人工著录的图书书目数据库,包含了书名、责任者、主题词、出版社、ISBN、出版日期等信息。当某本图书的特征向量与读者的兴趣特征向量产生较大交集(即较大效用值)时,系统就把该图书作为读者的备选推荐产品。系统再依据效用值的大小对备选产品进行排序,最后向用户推荐。   基于内容过滤的图书推荐系统的主要分为以下四个步骤:(1)读者兴趣向量的建模与表达,图书特征向量的建模与表达;(2)在同一向量空间下,计算读者兴趣特征向量与图书特征向量的相似度;(3)根据相似度的大小对结果进行排序,取前几位图书产生推荐列表;(4)若读者兴趣特征模型产生更新,或增加新的图书特征向量模型则返回步骤1。   1.2 基于内容过滤的推荐系统的优点和存在问题   基于内容过滤的推荐系统利用资源和用户兴趣的相似性来过滤信息,它的关键问题是相似性计算,优点是简单、有效,缺点是难以区分资源内容的品质和风格,而且不能为用户发现新的感兴趣的资源,只能发现和用户已有兴趣相似的资源。基于内容过滤的推荐系统根据用户查询内容而进行推荐,其推荐结果具有短期效应,适合电子购物系统。而对于拥有长期用户的系统来说,则没有充分利用用户的历史数据尤其是相似用户的相关数据,缺乏推荐潜在兴趣产品的功能。   1.3 内容过滤推荐系统有利于充分开发数字图书馆资源   数字图书馆的建设不应该仅考虑组织众多的数字化资源,被动地等待用户前来选择,而应以用户为中心,整合数字资源,提供主动的信息服务。构建一个融多种技术为一体的信息推荐系统。在数字图书馆的环境下,图书文献信息的种类和数量都非常多,用户不可能像在实际的图书馆那样直接选取所需的文献资料。因此,数字图书馆应该充分揭示有关信息,自动推荐用户可能感兴趣的图书文献,实现数字资源的深层次挖掘分析,提高其使用价值。   1.4 基于内容过滤推荐是数字图书馆环境下的基本需要   数字图书馆具有信息量庞大、内容繁杂、形式多样、数据对象异构、分布式存储等特征,用户选择和利用所需信息比较困难。数字化图书馆虽然提供服务的方式与传统图书馆有些不同,但为用户提供高质量的服务的职能却没有改变。通过对信息资源的推荐有助于用户作出正确的评价和选择,使价值高的信息资源能够充分被利用。   2.基于读者文件的内容推荐算法   为了计算读者与推荐图书的相似度,首先需要将读者的兴趣表达出来以供系统识别和计算。读者的兴趣在系统中表示成读者兴趣文件,文件应该包括读者兴趣的内容并用系统可以理解的形式表达出来。读者兴趣文件是图书推荐系统的重要组成部分,是推荐算法的重要依据。   读者的兴趣主要受到读者的专业、身份、借阅行为等信息影响。根据系统建模工程方法,本文将读者的信息抽象为属性和操作。读者的属性主要指读者的专业、身份、职称、研究方向等较为固定的静态信息。这些可以从图书馆管理系统的读者数据库中获取,也可以通过读者自行修改完善个人信息而获得。读者的操作主要是指借阅、查询等行为信息。该信息可以从图书馆管理系统中的流通数据库中获得。本文假定读者在图书管理系统中的操作行为都因兴趣动机而起,因此操作行为可以反映读者的兴趣特征。于是本文通过对操作行为的研究揭示读者兴趣。   根据兴趣的时效性,将用户的兴趣模型概括为近期兴趣和长期兴趣。近期兴趣主要依据读者的近期借阅、查询行为而产生,具有高效用性、亟需性和短期性等特性。长期兴趣主要依据读者的专业、身份等静态属性而产生,具有高匹配性、稳定性和长期性等特性。   与读者的操作行为产生关联的读者属性通常为读者的专业、课程、研究方向、身份、职称、年龄、性别、兴趣爱好等。   表1 读者属性列表   专业 课程 研究方向 职称 年龄 性别 兴趣爱好   教师   学生   其他   读者属性可以通过读者个人ID信息自动抽取或通过读者主动填写个人资料获取。   读者的操作信息主要记录了读者的外借图书信息,检索、下载的文献信息。   表2 读者操作信息列表   外借 图书信息   借阅时长   评价   检索下载 内容主题   评价   在基于内容过滤的图书推荐系统中,从读者的属性列表和操作信息列表中提取若干兴趣特征词,形成读者兴趣特征向量。因此采用读者的兴趣向量模型来表示读者兴趣文件。在介绍图书特征向量的表示之前,本文先对向量空间模型加以说明。向量空间模型(Vector Space Model,VSM)是由康奈尔大学G.Salton教授提出的,把文本简化为以向量分量的权重为分量的向量表示,把文本处理过程简化为空间向量的运算,使问题复杂性大大降低,关键是基于空间向量模型的。
  在读者兴趣特征向量建立后,需要对此进行定量化表达,以便推荐系统能够进行精确计算。在图书推荐系统中,采用对不同的兴趣特征赋予不同的权重,以达到对特征向量的量化处理。权重值依据喜爱程度从低到高表示为-1分到1分不等。未曾获得读者评价的特征值表示为0分。读者的近期兴趣特征值和长期兴趣特征值应该赋予较高的权重。当读者的操作信息表更新,读者的近期兴趣特征值就相应变化。而读者的长期兴趣特征值则应保持稳定的权重值,除非读者的属性表中更新了读者的研究方向、专业、兴趣爱好等信息。   3.基于读者文件和图书文件相似度计算   在读者文件和图书文件建立之后,需要将二者进行相似度计算。通过计算,可以精确计算读者与图书的匹配度,从大量图书中迅速过滤出与读者兴趣匹配值高的图书,进而形成推荐列表,帮助读者选择图书。   3.1 几种常见的相似度计算方法   计算相似度的方法比较多,常见的有余弦相似性计算法、皮尔森相关系数法和改进的余弦相似性法。如今许多计算方法都是基于这三种方法做出的修正和改进。下面对这三种方法分别简要介绍。   (1)余弦相似性(Cosine):在信息检索领域,两篇文档之间的相似度往往通过把文档看作是一个词频矢量,然后计算两词频矢量的夹角余弦来表示。同样,也可以将这种方法用于图书推荐系统,将读者对图书的评分看作为n维图书空间上的向量,如果读者对图书没有进行评分,则将读者对该图书的评分设为0,读者间的相似性通过矢量间的夹角余弦来度量。设读者i和读者j在n维图书空间上的评分分别表示成,则读者i和读者j之间的相似性sim(i,j)为:   其中,分子为两个读者评分向量的内积,分母为两个读者评分向量模的乘积。   (2)皮尔森相关系数(Pearson):也称为相似相关性(Correlation)。假设读者i和读者j共同评分过的图书集合用Ii,j表示,则读者i和读者j之间的相似性sim(i,j)可以通过Pearson相关系数来度量:   其中,Ri,c表示读者i对图书c的评分,分别代表读者i和读者j的平均评分。   3.2 形成推荐列表,帮助读者选择图书   读者文件与图示文件的相似度值计算出来以后,重复N次计算,得到读者文件与所有图书文件的相似度值。按照值的大小,从高到低依次排序。选取前几项,查检对应的图书,形成推荐列表,推荐给读者。   4.结语   随着信息网络的广泛应用,信息数据在飞速增长,一方面为人们提供了极为丰富的信息资源,另一方面也增加了人们寻找合适资源的时间成本和难度。人们在信息领域的个性化需求,必将推动推荐系统的快速发展。当推荐系统进一步成熟并在现实网络中得到广泛深入的应用,人们将享受到推荐系统所带来的人性化的推荐服务。   参考文献:   [1]谢琳惠.推荐系统在高校数字图书馆的应用[J].现代情报,2006(11):72-74.   [2]黄希全.数字图书馆推荐系统中用户偏好的建模方法[J].情报杂志,2006(1):28-30.   [3]张俊,黄水清.国内外数字图书馆个性化信息服务系统的功能与特征比较研究[J].情报理论与实践,):609-612.   [4]陆觉民,郑宇.数据挖掘技术的改进在图书馆个性化服务中的应用[J].现代图书情报技术,(8):65-68.   [5]高凤荣.个性化推荐系统关键技术研究[D].人民大学博士论文,2003,11.
【摘要】随着管理系统的广泛应用,信息数据在飞速增长,一方面人们拥有了海量的信息资源,另一方面人们寻找合适信息的时间成本和难度也增加了。目前广泛采用的信息检索技术只能够向用户提供数量巨大的、缺乏个性化的检索结果。推荐系统是一个由人、计算机软硬件和数据资…中图分类号:F062.2文献标识码:A文章编号:X(80-03一、西部实施生态补偿的重要性和紧迫性从法律的视角看,所谓生态补偿是指为了恢复、维持和增强生态系统的生态功能,国家对导致生态功能减损的自然资源开发或利用者…【摘要】在石油化工企业中,管道运输是油品运送的主要手段,但是随着管道运输距离的增长,管道的安全运行和维护受到了前所未有的威胁和挑战,各种原因导致的管道泄漏将造成大量资源的浪费和环境的污染,那么选择一款优秀的管道泄漏监测报警定位系统,及时准确地报告事故…我们的学生,他们从没有读过名校,但却有着纯洁的心灵;他们可能成绩不是那么理想,但却同样怀抱有远大的理想;作为一名技校的老师,我同样感到自豪,尤其作为一名技校的班主任,我更是感觉肩上担子的沉重。对我们的学生来说,三年的技校学习生活,高一是大家学习习惯和…就爱阅读网友整理上传,为您提供最全的百科知识,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    计算机推荐系统可以分为三类:协同过滤、混合推荐系统还有一个是什么?
计算机推荐系统可以分为三类:协同过滤、混合推荐系统还有一个是什么?
急,希望真正懂得计算机的仁人志士给予正确的回答,谢谢
基于内容(content-based)的推荐系统。
请遵守网上公德,勿发布广告信息
相关问答:基于协同过滤的推荐方法 - 推酷
基于协同过滤的推荐方法
协同过滤(Collaborative Filtering, CF)是推荐系统广泛使用的一种技术,它主要通过考虑用户(User)与用户之间、物品(Item)与物品之间的相似度(Similarity),来向用户推荐物品,常被用在电商网站中。其中,在推荐系统中最常使用的协同过滤方法,有如下4种:
基于用户的协同过滤推荐
基于物品的协同过滤推荐
基于模型的协同过滤推荐
混合协同过滤推荐
上面4种方法中,基于用户的协同过滤推荐、基于物品的协同过滤推荐都是基于内存的协同过滤推荐,一般在数据量较小的应用场景下,可以直接在线使用的实时推荐方法;基于模型的协同过滤推荐一般用于离线计算,它采用机器学习的方法,一般首相将用户偏好行为数据分成2个数据集(有时可能会将数据集分成k个子集,采用交叉验证的方式来提高模型精度),一个为训练集,一个为测试集,使用训练集数据来训练出推荐模型,然后使用测试集数据来评估模型的精度,当满足特定精度时,可以将得到的推荐模型应用于实际线上环境;混合协同过滤推荐,是综合基于内存的协同过滤(基于用户的协同过滤推荐、基于物品的协同过滤推荐)、基于模型的协同过滤推荐这两类方法,克服每一种协同过滤方法本身的缺点,比如基于内存的协同过滤推荐方法不适用于大量数据的推荐应用场景,而基于模型的协同过滤推荐方法由于所基于的数据多是大量历史记录,训练模型时间较长,它不适用于在线推荐场景,综合各种协同过滤推荐方法,取长补短,这样的推荐方法更适合实际复杂的推荐需求。
对象相似性度量
在介绍4种协同过滤推荐方法之前,我们先介绍一下有关相似性度量的问题:
基于协同过滤推荐方法,通过计算用户相似度、物品相似度来进行个性化推荐,那么我们结合Mahout机器学习库来说明各种相似性度量的计算方法,Mahout提供了分别针对用户、物品给出了一些相似性度量计算实现,有些是用户、物品可以共同使用的,如下类图所示:
上图中,绿色表示计算用户之间相似度、物品之间相似度都可以使用的相似性度量,而SpearmanCorrelationSimilarity只能用于计算用户的相似度。各种相似度说明如下所示:
EuclideanDistanceSimilarity
欧几里德距离,又称欧氏距离,在n维欧式空间中,计算欧几里德距离的公式,如下所示:
其中,x、y表示两个点的坐标,d(x,y)表示点x和y之间的距离。
PearsonCorrelationSimilarity
对于两个数据集X、Y,他们的相关性可以使用皮尔逊相关系数来表达,计算皮尔逊相关系数的公式,如下所示:
其中,n分别表示两个数据集X与Y中数据点的个数,xi表示数据集X中第i个数据点,yi表示数据集Y中第i个数据点。
UncenteredCosineSimilarity
余弦相似度通过计算两个向量的夹角的余弦值,来表示两个向量的相似性,它的计算公式,如下所示:
其中,A和B表示两个向量。
LogLikelihoodSimilarity
Mahout采用了log-likelihood ratio(LLR)的方法计算相似度,对于事件A和事件B,我们考虑两个事件发生的次数,具有如下事件矩阵:
Everything but A
Everything but B
k11:事件A与事件B同时发生的次数
k12:B事件发生,A事件未发生
k21:A事件发生,B事件未发生
k22:事件A和事件B都未发生
那么,计算LLR的公式如下:
其中,H表示香农熵。
在Mahout中给出的实现,如下代码所示:
public static double logLikelihoodRatio(long k11, long k12, long k21, long k22) {
Preconditions.checkArgument(k11 &= 0 && k12 &= 0 && k21 &= 0 && k22 &= 0);
// note that we have counts here, not probabilities, and that the entropy is not normalized.
double rowEntropy = entropy(k11 + k12, k21 + k22);
double columnEntropy = entropy(k11 + k21, k12 + k22);
double matrixEntropy = entropy(k11, k12, k21, k22);
if (rowEntropy + columnEntropy & matrixEntropy) {
// round off error
return 0.0;
return 2.0 * (rowEntropy + columnEntropy - matrixEntropy);
具体可以查阅相关资料。
TanimotoCoefficientSimilarity
Tanimoto相关系数来源于Jaccard距离,它表示两个数据集的相异度,即不相似度量。
计算Tanimoto相关系数的公式,如下所示:
其中,A和B表示两个向量。
CityBlockSimilarity
曼哈顿距离有很多种叫法:城市街区距离、L1距离、L1范数、曼哈顿长度、Taxicab距离(出租车距离)。计算曼哈顿距离的公式,如下所示:
其中,x和y表示两个n维向量。
SpearmanCorrelationSimilarity
Spearman相关系数的计算公式,如下所示:
其中,di=xi-yi,n表示数据集的大小,xi与yi分别是数据集X、Y中的数据点。
下面,我们会对上面提到的4种协同过滤方法进行详细说明,其中会结合Apache Mahout,并给出相应的实现代码,以求能够更好地理解各种协同过滤方法。
基于用户的协同过滤推荐
基于用户的协同过滤推荐,不考虑用户、物品的属性(特征)信息,它主要是根据用户对物品的偏好(Preference)信息,发掘不同用户之间口味(Taste)的相似性,使用这种用户相似性来进行个性化推荐。基于用户的协同过滤推荐,它是以用户为中心,观察与该用户兴趣相似的一个用户的群体,将这个兴趣相似的用户群体所感兴趣的其他物品,推荐给该用户。下面我们通过一个例子来说明,如下图所示:
如上图,以用户U1为中心,用户U1对物品I12、I13、I14有偏好行为,用户U3对物品I12、I13、I14、I31、I32、I33有偏好行为,而物品I12、I13、I14是用户U1和用户U3共同有偏好行为的物品,那么可以将用户U3有偏好行为但是用户U1没有的物品I31、I32、I33推荐给用户U1。
下面通过使用Mahout机器学习库实现,基于用户的协同过滤推荐,来了解计算用户相似度的方法,代码如下所示:
final DataModel model = new FileDataModel(new File(&src/main/resources/u.data&));
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
int n = 20;
UserNeighborhood neighborhood = new NearestNUserNeighborhood(n, similarity, model);
final UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
long userID = 200;
int topN = 10;
List&RecommendedItem& recommendations = recommender.recommend(userID, topN);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation.getItemID() + &: & + recommendation.getValue());
对于编号为200的用户,使用皮尔逊相关系数(PearsonCorrelationSimilarity )和NearestNUserNeighborhood计算用户相似度,得到的Top 10推荐物品及其评分列表,如下所示:
895: 4.6441307
100: 4.6418004
315: 4.564026
896: 4.5467043
285: 4.5023627
344: 4.475635
346: 4.4689593
272: 4.4235177
750: 4.297509
基于用户的协同过滤推荐,比较适合于用户数量少于物品数量的应用,这样,通过更多的用户对物品的偏好行为历史数据,维护用户的相似关系,能够更好地计算出用户的相似性。
基于物品的协同过滤推荐
基于物品的协同过滤推荐,也不考虑用户、物品的属性(特征)信息,它也是根据用户对物品的偏好(Preference)信息,发掘不同物品之间的相似性。基于物品的协同过滤推荐,是以物品为中心,通过观察用户对物品的偏好行为,将相似的物品计算出来,可以认为这些相似的物品属于特定的一组类别,然后根据某个用户的历史兴趣计算其所属的类别,然后看该类别是否属于这些成组类别中的一个,最后将属于成组类别所对应的物品推荐给该用户。下面我们也通过一个例子来说明,如下图所示:
上图中,用户U1对物品I5和I6有偏好行为,用户U3对物品I1和I6有偏好行为,那么我们可以向U1推荐用户U3所感兴趣的物品I1。同样,用户U7对物品I3、I4、I7有偏好行为,用户U9对物品I4、I5、I7有偏好行为,那么我们可以向用户U7推荐用户U9所感兴趣的物品I5,因为用户U7和用户U9都对I4、I7有过偏好行为;可以向用户U9推荐用户U7感兴趣的物品I3,这个2个用户可能对彼此其他感兴趣的物品也都会发生偏好行为。
基于用户的协同过滤推荐,使用Mahout机器学习库计算,来了解计算物品相似度的方法,代码如下所示:
final DataModel model = new FileDataModel(new File(&src/main/resources/u.data&));
ItemSimilarity similarity = new LogLikelihoodSimilarity(model);
final ItemBasedRecommender recommender = new GenericItemBasedRecommender(model, similarity);
long userID = 200;
int topN = 10;
List&RecommendedItem& recommendations = recommender.recommend(userID, topN);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation.getItemID() + &: & + recommendation.getValue());
对于编号为200的用户,使用对数似然(PearsonCorrelationSimilarity )计算物品相似度,得到的Top 10推荐物品及其评分列表,如下所示:
基于物品的协同过滤推荐,比较适合于物品远远少于用户的应用,这样可以更好地维护物品之间的相似关系。
基于模型的协同过滤推荐
基于模型的协同过滤推荐,是采用机器学习的方法,通过离线计算实现推荐的,通常它会首先根据历史数据,将数据集分成训练集和测试集两个数据集,使用训练集进行训练生成推荐模型,然后将推荐模型应用到测试集上,评估模型的优劣,如果模型到达实际所需要的精度,最后可以使用训练得到的推荐模型进行推荐(预测)。可见,这种方法使用离线的历史数据,进行模型训练和评估,需要耗费较长的时间,依赖于实际的数据集规模、机器学习算法计算复杂度。有关推荐模型的计算方法,通过机器学习算法实现,我们简单说明一下。
对于我们的用户历史行为数据,我们关注的是用户与物品之间的关系,可以生成一个用户-物品矩阵,矩阵元素表示用户对物品的偏好行为(或者是评分),如果用户和物品的数量都很大,那么可见这是一个超大稀疏矩阵,因为并不是每用户都对所有的物品感兴趣,只有每个用户感兴趣的物品才会有存在对应的偏好值,没有感兴趣的都为空缺值,最终我们是要从这些空缺值对应的物品中选择出一些用户可能会感兴趣的,推荐给用户,这样才能实现个性化推荐。
下面,我们假设使用用户-物品的评分矩阵来实现推荐,定义评分矩阵为R,那么通过将R分解为另外两个低秩矩阵U和M,由于R是稀疏矩阵,很多位置没有值,只能通过计算使用U与M的乘积近似矩阵R,那么只要最终得到的误差尽量小,能满足实际需要即可,一般使用均方根误差(Root mean square error,RMSE)来衡量,那么就要计算一个目标函数的最小值,如下函数公式所示:
如果计算该目标函数的最小值,可能需要大量的迭代计算,甚至是不可行的,在满足实际需要精度的前提下,那么我们可以允许一定的误差,通过设定多个参数来控制计算。计算矩阵分解有很多方法,如:随机梯度下降(Stochastic gradient descent,SGD)、交替最小二乘法(Alternating Least Squares,ALS)、加权交替最小二乘法(ALS with Weighted-λ-Regularization,ALS-WR),有关实际计算的理论,可以参考相关资料。
Mahout采用了ALS-WR方法实现矩阵分解,目标函数如下公式所示:
这里,alpha表示的是置信参数,在Mahout中使用隐式反馈(Implicit Feedback )选项时,需要指定该参数;lambda表示的是正则化参数,为了防止求解得到的模型过拟合(Overfitting),在目标函数上,加上一个正则项。
我们可以通过它提供的API来实现一个离线的基于模型的协同过滤推荐,下面我们基于MovieLens数据集,介绍具体使用过程:
准备训练集和测试集
我们选择使用MovieLens数据集,2亿的评分数据(大约有500多MB),首先将数据集进行分割:80%用作训练集,20%用作测试集,Mahout提供分割数据集的工具,分割执行如下命令:
bin/mahout splitDataset -i /test/shiyj/data/ml-20m/ratings.csv -o /test/shiyj/data/splitDS -t 0.8 -p 0.2 --tempDir /tmp/mahout/
这样,生成2个数据集:/test/shiyj/data/splitDS/probeSet和/test/shiyj/data/splitDS/trainingSet。
训练推荐模型
使用训练集/test/shiyj/data/splitDS/trainingSet来训练推荐模型,执行如下命令:
bin/mahout parallelALS -i /test/shiyj/data/splitDS/trainingSet -o /test/shiyj/data/output/als --lambda 0.1 --implicitFeedback true --alpha 0.065 --numFeatures 10 --numIterations 10 --numThreadsPerSolver 2 --tempDir /tmp/mahout
上面命令执行结果,数据会在/test/shiyj/data/output/als/目录下面,可以看到生成如下目录:
/test/shiyj/data/output/als/U
/test/shiyj/data/output/als/M
/test/shiyj/data/output/als/userRatings
这些目录下的文件就是推荐模型对应的数据文件,可以用于后面步骤中的评估和最终推荐。
评估模型使用Mahout的evaluateFactorization命令,需要输入上一步生成的模型文件,如下所示:
bin/mahout evaluateFactorization -i /test/shiyj/data/splitDS/probeSet -o /test/shiyj/data/output/als/rmse --userFeatures /test/shiyj/data/output/als/U --itemFeatures /test/shiyj/data/output/als/M --tempDir /tmp/mahout/rmse
可以看到,最后输出了RMSE,在文件/test/shiyj/data/output/als/rmse/rmse.txt中。
如果我们训练得到的模型在评估以后,误差能够满足实际推荐业务需要,则可以直接用于实际的推荐系统。Mahout提供了一个基于命令行的推荐方式,可以使用recommendfactorized命令,如下所示:
bin/mahout recommendfactorized -i /test/shiyj/data/output/als/userRatings -o /test/shiyj/data/output/als/recommendations --userFeatures /test/shiyj/data/output/als/U --itemFeatures /test/shiyj/data/output/als/M --numRecommendations 10 --maxRating 5
上面指定了,为每个用户选择Top 10个物品作为推荐,并计算出了评分,执行上述命令,得到推荐结果,在目录/test/shiyj/data/output/als/recommendations中,该目录下的文件内容,示例如下所示:
[:0.0:0.6:0.:0.0:0.7:0.2:0.:0.0:0.]
[:0.8:0.0:0.1:0.0:0.1:0.:0.7:0.7:0.1480078]
[.0:0.:0.:0.6:0.1:0.6:0.:0.:0.5497311]
[457:0.:0.:0.:0.:0.:0.:0.:0.:0.:0.]
[1:0.:0.:0.:0.:0.:0.:0.:0.:0.:0.]
[648:0.:0.:0.:0.3:0.:0.0:0.:0.:0.:0.]
[:0.0:0.7:0.1:0.1:0.4:0.7:0.0:0.4:0.4534099]
[480:0.:0.:0.:0.:0.:0.:0.:0.:0.:0.]
[:0.1:0.97:0.:0.8:0.9:0.04:0.9:0.:0.]
[:0.:0.1:0.:0.6:0.4:0.7:0.7:0.0:0.]
实际应用中,为了加快在线上推荐系统的检索,这些结果,可以考虑将数据存储到ElasticSearch或者SolrCloud系统中,方便查询。
混合协同过滤推荐
我们前面已经了解到,各种推荐方法都有其优点和缺点,那么对于实际复杂的需求,没有一种推荐方法能解决所有的问题,所以根据不同的需求采用组合多种推荐方法,共同来完成实际的推荐需求。我们引用IBM Developerworks上一篇文章中介绍的,基于混合协推荐的实现方法,常用的有如下几种:
加权的混合(Weighted Hybridization): 用线性公式将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。
切换的混合(Switching Hybridization):其实对于不同的情况(数据量,系统运行状况,用户和物品的数目等),推荐策略可能有很大的不同,那么切换的混合方式,就是允许在不同的情况下,选择最为合适的推荐机制计算推荐。
分区的混合(Mixed Hybridization):采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户。
分层的混合(Meta-Level Hybridization): 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐。
我们可以想到,根据前面介绍的基本协同过滤推荐方法,作为入门,可以这样实现一个混合协同过滤系统:
根据用户的历史行为数据,离线计算推荐模型,得到模型A;
为了使推荐满足实时行要求,可以选择使用基于用户的协同过滤推荐/基于物品的协同过滤推荐,基于实时用户行为数据,得到模型B;
对于用户的冷启动问题,可以考虑采用统计的方式,找到热门的物品推荐给新用户,得到模型C;
对于老用户,可以将模型A和B的结果进行一个排序筛选,得到一个新的Top N推荐列表。
这样,得到的推荐系统,就是一个混合推荐系统。
Apache Mahout Essentials
Large-scale Parllel Collaborative Filtering for the Netflix Prize
项亮:《推荐系统实践》
许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名时延军(包含链接:),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 协同过滤推荐算法代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信