使用 Hadoop 和 Mahout 实现推荐引擎 已翻译 100%

oschina 投递于 2013/02/14 10:25 (共 3 段, 翻译完成于 02-15)
阅读 6536
收藏 45
4
加载中

作为我之前博客的延续,在这篇博客中,我将探讨如何使用 MahoutHadoop 实现一个 推荐引擎

  • 第一部分 介绍 MapReduce 和 为什么为了利用并行计算的优势,一些算法需要而重写
  • 第二部分 我会探讨 利用Hadoop的优势 推荐算法 在 Mahout 中如何推演
  • 第三部分 我会用 使用案例 来展示 如何在Hadoop和Mahout中实现 MapReduce 推荐引擎
利用并行计算的优势,一个基础要点是,集群中的计算机可以在不依赖于和其他计算机共享数据的情况下进行同一个任务。考虑排序算法情况下,他们并不是设计用于如下场景:我们将大块数据集拆分,然后递交给许多并行计算的计算机,当数据返回的时候,将大块数据集组装,得出结果。如果我们需要做排序,我们需要写一个利用MapReduce优点的算法。Terasort 算法是一个高度利用MapReduce优势的排序技术。
郭琰珂
郭琰珂
翻译于 2013/02/15 15:08
1

推荐引擎十分相似,如果我们需要利用MapReduce的优点,我们需要重写它。Mashout支持推荐算法。推荐引擎包含如下组件:

  • 基于用户/项目的推荐系统
  • 相似性(近邻概念)

在推荐引擎里面,相当于“Hello world”的程序就是Netflix电影评分。电影数据可以在这里下下载。测试数据包含用户租借电影的历史数据和用户对电影的评分数据。当你需要租借一部新的电影,推荐引擎会基于你的租借习惯,还有其他跟你相似的用户的租借记录,给你推荐一些电影。测试数据保存在事务型数据库里面,就如MySQL。我们可以写一个程序读取测试数据并把它导入Hadoop的文件系统里面。当你运行Mashout MapReduce,就会得到前“n”个推荐电影。如果你细心观察测试数据,你会发现有userid, itemid, rating字段,并以逗号隔开。它会假设,你在数据库中维护着用户和项目的数据表,并且通过这两个表的结合,给用户提供有意义的信息。

下面,我们一起看看基于项目的推荐算法是如何通过MapReduce实现的,想获得更多这方面的信息,可以查阅Mahout in Action by Manning, chapter 6.

enixyu
enixyu
翻译于 2013/02/15 16:30
1

推荐系统相关

  • 第一步,利用上面的数据建立一个co-occurrence矩阵。矩阵主要作用是告诉我们2个项目同时被用户购买的发生次数。它基本上是一个以n×n的方形矩阵(n是用户购买的所有项目的总数)。
  • 下一步,计算用户购买了哪些项目的向量,以单列矩阵实现。
  • 最后一步,把第一步生成的co-occurrence矩阵与用户向量相乘得到推荐数据。我们把最大非零值的项目推荐给用户。

下面让我们来分析一下航班预订系统。当一个用户需要购买到达某地的机票的时候,我们就会基于他之前购买过的航班记录和其他相似乘客的订票记录,给他推荐航班。假设MySQL里面存在这样的数据,我们可以使用sqoop脚本把数据导入到HDFS:

sqoop import --connect jdbc:mysql://localhost/reservation --username krishna --password pass123  --table useritem
在Hadoop中运行以下mashout脚本
hadoop jar mahout-core-0.6-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --usersFile input/users.txt --booleanData --similarityClassname SIMILARITY_COOCCURRENCE

最后,运行sqoop脚本把分析结果导回到mysql中:

sqoop export --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem --export-dir useritem/part-m-00000
现在,我们就可以读取useritem表把推荐结果返回给你的用户了。
enixyu
enixyu
翻译于 2013/02/15 17:00
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(5)

今天天气不错哟
今天天气不错哟
还能再深入点吗
s
shawngespan
测试了一下,觉得应该是非零。但是“highest”是最大,好像有点问题
nathanwu
nathanwu

引用来自“enixyu”的评论

作者原话“The value to recommend to the user is the item with the highest of the zero value”,但我觉得不妥,应该是non zero value吧。。。如果是零值,说明用户没有购买记录,或者项目之间没有同时被购买的记录,那推荐这样的项目,有什么意思呢。。。

我的判断应该是0,买过还买什么
enixyu
enixyu
作者原话“The value to recommend to the user is the item with the highest of the zero value”,但我觉得不妥,应该是non zero value吧。。。如果是零值,说明用户没有购买记录,或者项目之间没有同时被购买的记录,那推荐这样的项目,有什么意思呢。。。
郭琰珂
郭琰珂
对Hadoop理解不深,仅翻译了第一段。躬请指正。
返回顶部
顶部