首页 文章

具有hadoop的并行机器学习(推荐)算法

提问于
浏览
2

我正在研究推荐算法: Matrix Factorization using a stochastic gradient as optimizer.

我想并行化我的算法 . 我找到了这篇文章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 cluster

欢迎任何线索


我忘了提一些东西 . 我在spark上看到了带有 SGD 的示例 regression logistic .

但数据集只是一个

UserID | ItemID | ratings

在我的情况下,为了加强算法,我们添加了一些用户信息和项目信息 . 所以我还有两个文件(UserID age sex ..)和(ItemID颜色大小..),我需要在每个数据节点上完成计算 .

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

val textFile = sc.textFile("README.md")
  • 会发生什么?

  • 将在每个datanode的内存上创建rdd吗?

  • 每个数据节点的所有任务是否只能在本地处理?

1 回答

  • 2

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

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

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

    作为一个实际的注意事项,随机步骤之前的改组通常被排除在外 . 它需要重写数据或完全内存映射在每次迭代时将其混洗 - 两者都非常昂贵 .

相关问题