设为首页收藏本站

LUPA开源社区

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

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

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

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

  今天想帮助别人吗?


  根据用户之前的回答历史,我们可以把Stack Exchange的新问题推荐给一个能够回答的用户,这与亚马逊通过你之前的购买记录给你提供推荐很相似。不知道Stack Exchange是做什么的? - 它运行了很多的Q&A网站,包括广受欢迎的Stack Overflow。



  我们目前的任务是如何分析用户之前的回答,从而预测该用户今后所能回答的问题。Stack Exchange目前的推荐逻辑可能比我们的好很多,但这不会阻止我们以个人学习目的去帮助他们;)。

我们将会做以下任务.

  • 从Stack Exchange数据集中提取所需的信息
  • 用提取的信息建立一个推荐

但是,一切从基础开始!如果你是第一次接触Apache Hadoop和Azure上的Hadoop,我建议你在开始之前阅读这些介绍性的文章,在我介绍HDInsight和Map Reduce模式时以便知道更详细的情况。


幕后 

让我们开始吧,先做一些分布式机器学习应用的“数据实验”,酷!

  • 建议 - 记得亚马逊的建议吧?基于历史来预测偏好。
  • 聚类  - 从一堆文件内找出相关的文档或从社区内找到志同道合的人等类似的任务。
  • 分类  - 识别一个新条目属于哪个分类,这通常包括一个先决的训练系统,还需要一个检测系统。

“大数据”这个术语通常在你需要处理一个非常大的数据集时使用。本文中,我们将从一个大的数据集中提取一些数据,然后根据我们提取的数据建立一个推荐。


推荐是什么?

从广义上讲,我们可以通过如下方式建立推荐:

  • 基于一个用户其类似用户之前回答的问题来寻找该用户可能愿意回答的问题。
  • 寻找跟他之前回答问题相似的问题。

第一中技术手段称为基于用户的推荐,第二种称为基于产品的推荐。


在第一种情况下,会尝试确定你与该用户共同回答了多少问题(你们俩都回答的问题)。例如,现在有User1、User2、User3和User4 - 回答了Q1、Q2、Q3和Q4这几个问题。右边的图显示了用户及他们所回答的问题

根据这个图,User1和User2回答了Q1、Q2和Q3 - User2回答了Q2和Q3但没有回答Q1。现在,在一定程度上,我们可以放心地假设User3会有兴起回答Q1 - 因为两个和他一样都回答过Q2和Q3的用户已经回答过Q1。有点感觉了,是不是?所以,如果你有一个{用户名,问题ID}的对应数组 - 建立一个推荐所需的数据基本已经满足了。


逻辑表

现在,我们究竟该怎样建立一个问题推荐呢?事实上,它是相当简单的。

首先,我们需要找出用户与问题对共同出现的次数。请注意,该矩阵与用户无关。例如,如果Q1和Q2共同出现了2次(在上面的图中),则共同发生值{Q1,Q2}即为2。这是个共生矩阵(希望我是对的)。

  • Q1和Q2共同发生了2次 (User1、User2回答了Q1、Q2)
  • Q1和Q3共同发生了2次  (User1、User2都回答了Q1、Q2)
  • Q2和Q3共同发生了3次 (User1、User2和User3回答了Q2、Q3)
  • 其他的类似统计

上面的矩阵显示了上面我们所讨论的问题(回答)对发生的次数。现在还没有映射到用户。现在,我们如何将这个联系到用户喜好呢?要找出一个问题匹配用户的程度我们只需要:

  • 找出该问题与另外问题共同被这个用户回答的频率
  • 消除已经被该用户回答的问题。


第一步,我们需要将上述矩阵变更成用户的偏好矩阵。

让我们拿User3做个示范,对User3来说,因为他已回答了问题Q2、Q3而没有回答Q1、Q4,所以他对问题[Q1,Q2,Q3,Q4]的偏好映射为[0,1,1,0],现在,让我们把这个数据与上面的矩阵合并,注意这是一个点积矩阵。结果显示了用户连带回答各个问题的频率(权重)。



我们可以在结果中忽略Q2和Q3,因为我们已经知道用户回答了它们。现在剩下Q1和Q4 – Q1具有更高的值(4)更匹配User3。换种方式讲,这表明Q1相比Q4来说与User3已回答的问题(Q2和Q3)关联性更大–所以相比Q4,User3将更有兴趣回答Q1。在实际的应用中需要注意:随着用户的回答会逐渐集中,用户的偏好矩阵是将会是稀疏矩阵(主要是零)。该逻辑的优点:我们可以使用多个任务使用分布式的MapReduce模型来计算用户矩阵,找到每个用户的点积矩阵等。



酷毙

雷人

鲜花

鸡蛋

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

最新评论

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

返回顶部