Mahout推荐算法API详解.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mahout推荐算法API详解

Mahout推荐算法API详解 前言用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根据业务的场景进行算法配置和调优。本文将深入算法API去解释Mahout推荐算法底层的一些事。目录Mahout推荐算法介绍 算法评判标准:召回率与准确率 Recommender.java的API接口 测试程序:RecommenderTest.java 基于用户的协同过滤算法UserCF 基于物品的协同过滤算法ItemCF SlopeOne算法 KNN Linear interpolation item–based推荐算法 SVD推荐算法 Tree Cluster-based 推荐算法 Mahout推荐算法总结 1. Mahout推荐算法介绍Mahoutt推荐算法,从数据处理能力上,可以划分为2类:单机内存算法实现 基于Hadoop的分步式算法实现 1). 单机内存算法实现单机内存算法实现:就是在单机下运行的算法,是由cf.taste项目实现的,像我的们熟悉的UserCF,ItemCF都支持单机内存运行,并且参数可以灵活配置。单机算法的基本实例,请参考文章:用Maven构建Mahout项目单机内存算法的问题在于,受限于单机的资源。对于中等规模的数据,像1G,10G的数据量,有能力进行计算,但是超过100G的数据量,对于单机来说是不可能完成的任务。2). 基于Hadoop的分步式算法实现基于Hadoop的分步式算法实现:就是把单机内存算法并行化,把任务分散到多台计算机一起运行。Mahout提供了ItemCF基于Hadoop并行化算法实现。基于Hadoop的分步式算法实现,请参考文章:Mahout分步式程序开发 基于物品的协同过滤ItemCF分步式并行算法的问题在于,如何让单机算法并行化。在单机算法中,我们只需要考虑算法,数据结构,内存,CPU就够了,但是分步式算法还要额外考虑很多的情况,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储等等的很多问题。2. 算法评判标准:召回率(recall)与查准率(precision)Mahout提供了2个评估推荐器的指标,查准率和召回率(查全率),这两个指标是搜索引擎中经典的度量方法。 相关 不相关检索到 A C未检索到 B DA:检索到的,相关的 (搜到的也想要的) B:未检索到的,但是相关的 (没搜到,然而实际上想要的) C:检索到的,但是不相关的 (搜到的但没用的) D:未检索到的,也不相关的 (没搜到也没用的) 被检索到的越多越好,这是追求“查全率”,即A/(A+B),越大越好。被检索到的,越相关的越多越好,不相关的越少越好,这是追求“查准率”,即A/(A+C),越大越好。在大规模数据集合中,这两个指标是相互制约的。当希望索引出更多的数据的时候,查准率就会下降,当希望索引更准确的时候,会索引更少的数据。3. Recommender的API接口1). 系统环境:Win7 64bit Java 1.6.0_45 Maven 3 Eclipse Juno Service Release 2 Mahout 0.8 Hadoop 1.1.2 2). Recommender接口文件:org.apache.mahout.cf.taste.recommender.Recommender.java接口中方法的解释:recommend(long userID, int howMany): 获得推荐结果,给userID推荐howMany个Item recommend(long userID, int howMany, IDRescorer rescorer): 获得推荐结果,给userID推荐howMany个Item,可以根据rescorer对结构重新排序。 estimatePreference(long userID, long itemID): 当打分为空,估计用户对物品的打分 setPreference(long userID, long itemID, float value): 赋值用户,物品,打分 removePreference(long userID, long itemID): 删除用户对物品的打分 getDataModel(): 提取推荐数据 通过Recommender接口,我可以猜出核心算法,应该会在子类的estimatePreference()方法中进行实现。3). 通过继承关系到Recommender接口的子类:推荐算法实现类:GenericUserBasedRecommender: 基于用户的推

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档