【问题标题】:Parallelized machine learning (recommendation) algorithm with hadoop使用hadoop的并行机器学习(推荐)算法
【发布时间】:2014-05-14 00:37:39
【问题描述】:

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

我想并行化我的算法。我发现这篇文章Parallelized Stochastic Descent Gradient。 他们给出了一个算法(p3):

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 负责数据的分发;如何限制我的程序仅在他当前的数据节点上处理数据?

有没有合适的方法用 spark + hadoop 集群来实现它?

欢迎任何线索


我忘了提一件事。我在 spark 上看到了带有 SGD 的示例 regression logistic

但数据集只是一个

      UserID | ItemID | ratings

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

我在想也许可以让 HDFS 的复制数量等于机器的数量,这样所有数据都将在每个节点上。但我不知道什么时候我会在 spark 上这样做:

 val textFile = sc.textFile("README.md")
  1. 会发生什么?
  2. 是否会在每个数据节点的内存上创建 rdd?
  3. 是否所有任务只能由每个数据节点在本地处理?

【问题讨论】:

    标签: hadoop machine-learning hdfs apache-spark matrix-factorization


    【解决方案1】:

    这与 Spark 在逻辑回归下的示例中使用的算法相同:

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

    是的,所有方法都依赖于将数据拆分为块,这就是 HDFS 本​​身所做的。 在 MapReduce 设置中,每个映射器都会执行最内层的 for 循环,reducer 会聚合来自所有计算机的结果。要收敛,您需要多次运行此操作 - 从而调度许多 MapReduce 作业。

    作为一个实用的旁注,随机步骤之前的洗牌通常被忽略。它需要在每次迭代时重写数据或完全内存映射+shuffle - 两者都非常昂贵。

    【讨论】:

    • 我忘了提一件事。我看到了这个例子,当数据集只是一个“UserID ItemID rating”时它可以工作,但在我的例子中,为了加强算法,我们添加了一些用户信息和项目信息。所以我在每个数据节点上还有两个文件(UserID 年龄性别..)和(ItemID 颜色大小..)以完成计算...
    • @GermainGum 然后在第一份工作中将它们加入您的文本文件,在通常的随机 GD 中,您可以将其用作您的功能。
    • 是的,多个 MR 作业意味着这在 Hadoop 中会非常慢。您可以在 Spark 中获得 100 倍的速度。
    • spark例子不是同一个算法。 spark 示例是常规批量梯度下降。所讨论的算法类似,但在每台本地机器上执行 SGD,然后平均得到的权重向量(而不是梯度)以产生最终输出。
    • @Raff.Edward 是的,我同意,您需要将权重更新放入地图调用中。
    猜你喜欢
    • 2022-12-11
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2015-05-06
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多