首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于hadoop的并行机器学习(推荐)算法

基于hadoop的并行机器学习(推荐)算法
EN

Stack Overflow用户
提问于 2014-04-02 15:35:33
回答 1查看 1.3K关注 0票数 2

我正在研究一种推荐算法:使用随机梯度作为优化器的矩阵分解。

我想并行化我的算法。我找到了这篇文章并行化随机下降梯度。他们给出了一个算法(p3):

代码语言:javascript
运行
复制
Algorithm 3 SimuParallelSGD(Examples {c1, . . . cm}, Learning Rate η, Machines k)

Define T = ⌊m/k⌋
Randomly partition the examples, giving T examples to each machine.
for all i ∈ {1, . . . k} parallel do
  Randomly shuffle the data on machine i.
  Initialize w(i,0) = 0.
  for all t ∈ {1, . . . T }: do
    Get the tth example on the ith machine (this machine), c(i,t)
    w(i,t) ← w(i,t−1) − η∂(w)  ci*(wi,t−1)
  end for
end for
Aggregate from all computers v = 1/k SUM(W(i,t) and return v.

他们评论道:

“该算法在结束前不需要机器之间的通信。这非常适合于MapReduce设置。”

我看不出他们是怎么实现的。他们是否“手动”分发了每台机器上的数据?或使用HDFS

当HDFS负责数据的分发时,我如何才能限制我的程序只在当前的数据节点上处理数据呢?

是否有合适的方法来实现它与火花+ hadoop集群

欢迎任何线索

我忘了提些事。我看到了回归logisticSGD在spark上的例子。

但是数据集只是一个

代码语言:javascript
运行
复制
      UserID | ItemID | ratings

在我的例子中,为了加强该算法,我们添加了一些用户信息和项目信息。所以我还有两个文件(UserID,年龄,性别…)和(ItemID颜色大小..)我需要在每个数据节点上完成计算。

我在想,也许应该把HDFS的复制数量与机器的数量相等,这样,所有的数据都会出现在每个节点上。但我不知道的是我什么时候会这么做:

代码语言:javascript
运行
复制
 val textFile = sc.textFile("README.md")
  1. 会发生什么呢?
  2. 是否会在每个datanode的内存上创建rdd?
  3. 是否每个datanode只能在本地处理所有任务?
EN

回答 1

Stack Overflow用户

发布于 2014-04-02 15:45:46

这是星火在逻辑回归下的例子中使用的相同的算法:

http://spark.apache.org/examples.html

是的,所有方法都依赖于将数据分割成块,这正是HDFS本机所做的。在MapReduce设置中,每个映射器都会执行内部最需要循环的操作,而还原程序将聚合所有计算机的结果。为了收敛,您将需要多次运行此操作,从而调度许多MapReduce作业。

作为一个实用的副词,随机步骤之前的洗牌通常被忽略.它要么需要重写数据,要么需要完整的内存--映射+每次迭代时对其进行洗牌--两者都是相当昂贵的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22816363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档