文档章节

推荐系统思考小结(基于Mahout)

Breath_L
 Breath_L
发布于 2012/06/03 12:06
字数 1084
阅读 6854
收藏 39

     最近一直学习Mahout和推荐引擎相关的知识,一直想搞清楚,什么样的推荐系统的架构才是合理,既能对海量数据进行复杂运算,又能及时响应做出推荐。在网上发现一篇对推荐系统结构讲解的很好的文章数:据驱动销售——个性化推荐引擎,里面提到这样的思想 数据的特性对我们的架构设计起到了一个非常关键的作用,因为我们可以使用完全不同的方式来将静态数据和动态数据分开处理,再合并分析 ”,对于一个数据挖掘初学者的我,很受启发。

     同时,自己也在思考,若结合实际的推荐系统中,针对不同的协同过滤算法,如何来划分动态、静态数据,它们是怎样的结构,怎么存储的,又是怎么合并分析的。根据文章作者对推荐系统的设计思路,结合Mahout的源码实现,我似乎找到了一些相似之处,来解释上面的问题。

     首先,仔细缕一遍Mahout产生推荐的算法流程:

     1. 原始数据,Mahout中所有协同过滤算的的输入数据,都要求这样的结构(UserID、ItemID、Preference)为一条记录,表示一个用户对某一个商品的喜爱程度;怎么得出这样的结果,Mahout并没实现,值需要你输入;一般来讲是通过分析用户各类行为日志记录,结合一些特征属性,计算出来。

     2. 根据不同的协同过滤算法,得到用户与用户的关系(基于用户的) 或 商品与商品的关系(基于商品的);这时的数据结构,更像是矩阵:UserAID(ItemAID)、UserBID(ItemBID)、Value(相似度)。

     3. 计算推荐列表,这一步比较细碎,根据不同的推荐算法,会有些许不同,但大体流程是不变;首先会计算出可能被推荐的书籍(基于用户的协同过滤算法,会先找出此用户的邻居,依次找出这些邻居喜欢的商品且此用户未浏览的商品;而基于商品的协同过滤算法,则直接找出所有此用户未浏览的商品);其次逐个计算这些可能被推荐的商品的得分,并以此得分由高到底的排序;最后返回前面N个(N可有客户端作为请求参数而指定)。

     都知道,Mahout框架式基于Hadoop的,这样分布式的运算以便海量数据的处理;然而Mahout的实现却又很多种(哪怕是同一个算法),也许Mahout是为了给开发者提供多种实现的选择;我自己总结了一下,它的实现模式根据Hadoop框架的使用情况大概可分为三种:

     第一种:完全不使用Hadoop,上述的逻辑均在单机里完成,为了达到效率,在第二步时,Mahout提供一个参数maxEntries来控制总数据量。

     第二种:部分使用Hadoop,即在上述逻辑中第二步运算用户与用户关系或商品与商品关系时使用Hadoop,将运算结果持久化;后续的计算由单机完成后并展示。

     第三种;完全是Hadoop运算,运算完以后的结果为:每个用户有一个推荐列表;展示的话直接查库就OK

     根据那片文章中作者描述的推荐系统结构,采用第二种实现是相对合理的,因为关系数据相对静态,并且此部分的数据量是十分庞大,它类似矩阵,若你用户数量或商品数量而M,那它的数据量为M*(M-1)/2,若全部放在内存中,会占用大量的资源,对静态数据来讲完全没有必要。

     而在第三步为用户计算推荐列表时,又可以结合用户的一些在线属性或浏览情况得到一些实时变化的推荐产生更好的用户体验。

    原创博客,转载请注明http://my.oschina.net/BreathL/blog/60725

© 著作权归作者所有

共有 人打赏支持
Breath_L

Breath_L

粉丝 225
博文 20
码字总数 26444
作品 0
朝阳
程序员
私信 提问
加载中

评论(5)

f
fangqiang91

引用来自“清风漫步”的评论

离线计算相似矩阵和定期更新; 然后从数据库读出数据进行计算; 此外还得考虑新鲜度等因素,所以一般的系统往往是多种算法来结合的.

怎么考虑新鲜度?请指教!

清风漫步
清风漫步
离线计算相似矩阵和定期更新; 然后从数据库读出数据进行计算; 此外还得考虑新鲜度等因素,所以一般的系统往往是多种算法来结合的.
yunitongle
yunitongle

引用来自“Breath_L”的评论

引用来自“yunitongle”的评论

还没有研究Hadoop,但是博主说的第二种方式看起来还不错,想知道下Hadoop计算关系数据是怎么存储的呀?存在数据库吗?

都可以

可以存在内存里呀,这个值得学习。楼主有QQ号吗,求指点呀,我的:453583092
Breath_L
Breath_L

引用来自“yunitongle”的评论

还没有研究Hadoop,但是博主说的第二种方式看起来还不错,想知道下Hadoop计算关系数据是怎么存储的呀?存在数据库吗?

都可以
yunitongle
yunitongle
还没有研究Hadoop,但是博主说的第二种方式看起来还不错,想知道下Hadoop计算关系数据是怎么存储的呀?存在数据库吗?
hadoop 推荐引擎资料记录

在hadoop上做推荐系统,主要的开源软件是mahout,不仅实现了基于协同的算法,还实现了很多机器学习算法。很有学习价值。 官网地址:http://mahout.apache.org 简介:http://www.ibm.com/deve...

七水禾
2014/03/24
0
0
Apache Mahout:适合所有人的可扩展机器学习框架

在软件的世界中,两年就像是无比漫长的时光。在过去两年中,我们看到了社交媒体的风生水起、大规模集群计算的商业化(归功于 Amazon 和 RackSpace 这样的参与者),也看到了数据的迅猛增长以...

龙鸟
2012/07/11
0
0
Mahout In Aciotn

Mahout In Aciotn 作者:Jack Zhang 来自开拓者部落 ,qq群:248087140,欢迎加入我们! 本文欢迎转载,转载请注明出处 http://my.oschina.net/u/1866370/blog/287907 i.Java和IDE(略) ii...

开拓者-2017
2014/07/09
0
0
从源代码剖析Mahout推荐引擎

从源代码剖析Mahout推荐引擎 Hadoop家族系列文章, 主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,...

片刻
2014/06/19
0
0
有没有基于开源的hadoop推荐系统,带mahout或者R语言的比较好???最好复杂点的 ​

有没有基于开源的hadoop推荐系统,带mahout或者R语言的比较好???最好复杂点的 有没有基于开源的hadoop推荐系统,带mahout或者R语言的比较好???最好复杂点的

天池番薯
2016/03/17
218
1

没有更多内容

加载失败,请刷新页面

加载更多

mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
1
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
3
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0
EOS主网数据同步指南

本文介绍如何安装EOS节点软件并接入EOS主网,主要包括以下内容: 如何安装EOS节点软件 如何配置EOS节点软件接入主网 如何启动EOS节点软件与主网数据同步 如何检查主网数据同步进度 如何正确地...

汇智网教程
昨天
3
0
matlab-线性代数 齐次方程组 基础解系和通解

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclc% x1+2*......

志成就
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部