设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

使用 Azure、Hadoop 和 Mahout 构建一个推荐系统

2013-7-17 11:48| 发布者: 红黑魂| 查看: 6310| 评论: 0|来自: 开源中国

摘要:   今天想帮助别人吗?  根据用户之前的回答历史,我们可以把Stack Exchange的新问题推荐给一个能够回答的用户,这与亚马逊通过你之前的购买记录给你提供推荐很相似。不知道Stack Exchange是做什么的? - 它运行了 ...

如果一切进展顺利的话,你会看到如下结果:


正如你上面看到的,你可以在/output/Cooking目录中找到输出。如果你RDP到你集群的头结点,现在检查你的

输出目录,你应该可以看到Map Reduce Job创建的如下文件。


正如你所期待的,这些文件包含了提取的数据,这些数据代表UserId,QuestionId--所有被一个用户回答的问题。

如果你愿意,你可以把数据从HDFS加载到Hive,并用带有ODBC的Microsoft Excel观察到同样的结果。可以参看

我之前写的文章。


第 4 步 – 构建推荐系统并产生推荐

作为下一步,我们需要构建共生矩阵并运行推荐作业,将{UserId,QuestionId}数据转变为推荐。幸运的是,我们

不需要为此写Map Reduce作业。我们可以使用Hadoop的同时使用Mahout库。 这里阅读Mahout相关资料

RDP到集群的头节点,因为需要安装Mahout。下载本文写作时最新版本的Mahout (0.7),原样拷贝到集群头节点的c:\app\dist目录。

Mahout的推荐作业(Recommender Job)支持以多种算法创建推荐——在本例中,我们将使用 SIMILARITY_COOCCURRENCE。 Mahout网站的 算法页面有更多关于推荐,聚类和分类的算法信息。我们将使用/output/Cooking目录的文件创建推荐信息。


该运行推荐作业了。创建一个users.txt,在该文件中记下推荐用户的ID,并且拷贝到HDFS

(Hadoop Distributed File System)


现在,接下来的命令将启动推荐作业。记住,我们会用上面Map Reduce作业的输出文件作为推荐系统的输入。我们

点击启动这个推荐作业。这会在/recommend/目录下产生输出,就是在users.txt文件中指定的所有用户。可以使

用–num 推荐开关指定针对每个用户的推荐数量。如果用户与条目之间有偏好关系,(如用户播放一首歌的次数),

那么可以采用{user,item,preferencevalue}形式给推荐系统提供输入数据集——在本例中,我们省略了偏好权重。


注意: 如果下面的命令在运行后失败了,提示输出目录已经存在,就试试使用hadoop fs –rmr temp and 

hadoop fs –rmr /recommend/  删除tmp目录和输出目录。

1hadoop jar c:\Apps\dist\mahout-0.7\mahout-core-0.7-job.jar
2    org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COOCCURRENCE
3    --input=/output/Cooking
4    --output=/recommend/
5    --usersFile=/data/users.txt

作业结束以后,检查/recommend/文件夹,试着打印一下生成文件的内容。你将会看到top推荐,针对users.txt文

件中的每个用户Id。



因此,如果给用户类似建议,推荐引擎会认为User  1393可以回答问题641916897 等等。你可以试验一下其

他类似的类,像SIMILARITY_LOGLIKELIHOOD, SIMILARITY_PEARSON_CORRELATION等等,以便找到

最好的结果。迭代与优化到你满意为止。

不过这里尝试的是另一种实践——检查Stack Exchange数据集,找出怎样去创建一个推荐,根据用户喜欢的问题,

显示出'你或许也会喜欢‘的问题?


总结

在这个例子中,我们手动上传所需的输入文件到HDFS,并手动触发推荐系统任务(Recommender Job)。事实上,

 你可以利用Hadoop For Azure SDK自动完成整个的工作流。但这是另一篇文章要讲的,敬请期待。现实中有很

多分析工作要做,包括为提取并转存数据到HDFS编写映射/归并,自动创建hive表,用HiveQL或者PIG执行操作

等等。然而,我们刚刚检查的这些步骤涉及到用Azure,Hadoop和Mahout做一些有意义的事。

你在你的移动应用或者ASP.NET程序中访问这些数据,或者使用Sqoop导入到SQL Server,或者把数据加载到

Hive表中,这是我刚提到的。快乐编程,机器学习(Happy Coding and Machine Learning)。把HD Insight

捆绑到现存的应用来建立端对端工作流,如果你对这种案列比较感兴趣,你可以联系我

我推荐你继续阅读

  • 我之前的文章            *关于 HDInsight
  • Mahout实践               *非常不错的开始,如果你想知道更多细节。
  • Mahout 教程 –           *一系列关于mahout的教程


英文原文:Building A Recommendation Engine - Machine Learning Using Azure, Hadoop And Mahout


参与翻译(3人)

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部