【问题标题】:Using multiple CPU's, What packages can I use to calculate linear models? [closed]使用多个 CPU,我可以使用哪些包来计算线性模型? [关闭]
【发布时间】:2016-01-20 04:27:57
【问题描述】:

我正在进行的项目的一部分是确定residuals。我正在执行此操作linear models
不幸的是,我发现的软件包要么不符合要求,要么出现故障。


我已尝试在我的项目中使用以下软件包。

  1. lm - R 中的标准线性建模函数
      + 专业人士 -- 无
      - cons -- 使用标准统计库,单核,无法处理内存不足计算
  2. fastLm - RcppArmadillo package 的一部分
      + pro's -- 多核
      - 缺点 -- 无法处理内存不足的计算。
  3. biglm - biglm package 的一部分
      + pro's -- 特别设计用于通过将数据拆分成块来处理内存不足的计算
      - 缺点 -- 单核
  4. speedlm - speedglm package 的一部分
      + pro's -- 多核,应该能够通过将数据分成块来处理内存不足的计算

我个人在使用speedlm 时遇到了一些问题,否则这将是首选包:


在谷歌搜索没有成功后,我使用以下代码试图找到新的包,尝试不同的关键字,但我似乎根本找不到任何合适的包。

find <- findFn("linear model lm", sortby="function", maxPages = 10)
format(find)

除了我上面提到的之外,还有没有满足以下要求的线性模型包:

  • 能够使用多个 CPU 计算线性模型
  • 能够拆分数据集和update 具有数据集块的线性模型
  • 获取拟合值

【问题讨论】:

  • @投反对票的人,你介意告诉我如何改进这个问题吗?
  • H2O 有一个可以处理这个问题的 GLM。但这不在 R 中,尽管您可以从 R 中运行所有内容。
  • 你不能。这是题外话。当然,您的优点/缺点是非常主观的。例如,如果您有办法获得拟合值,则不需要 residuals 方法。
  • @Roland 我已经编辑了优缺点。你是对的,如果我有办法获得拟合值,我不需要residuals 方法。
  • Revolution R 的版本(甚至是社区版本)使用多核、矢量化 SIMD (SSE/AVX) CPU 操作可以处理更多可以放入内存的数据。 lm 最终可能比任何其他选项都快得多,因为它使用矢量化操作。我看到svd 命令的执行速度提高了 7 倍

标签: r matrix lm


【解决方案1】:

线性模型的典型估计程序,例如R 用于 lm 的内容涉及QR decomposition,它出现(在大多数 BLAS 中;有关更多详细信息,请参见下文)本质上是一个顺序过程,因此绑定到单个内核。

其他方法可能是多核的,但可能无法实现您的真正目标 - 更快的计算。我会注意两个。

  1. 您可以探索alternate BLASes for R。但是,正如其中所述,“多线程 BLAS 库对使用 R 的实际分析问题没有显着影响”。例如,REvolution 确实提供了 R 的修改版本,该版本在拟合某些线性模型时使用多个内核......并且在涉及向量运算的部分操作上确实可能会更快一些。请参阅one of their pages talking about the speed advantage of using a multicore BLAS 上的 cmets 并自行评估。最终,证明将在布丁中 - 用你的实际问题尝试它,看看它是否能给你想要的东西(尽管我从现有的 cmets 中收集到它没有)。
  2. 您可以使用搜索词stochastic gradient decent 查看结果。如果有足够的资源,该方法可能能够为您提供一个能带来速度优势的多核解决方案。

顺便说一句,您在快速审查时认可为多核的两种方法在我看来并不是真正的多核。一般来说,将数据分成块很容易,我可能又错了,但我认为你不能并行处理这些块并重新组合模型......也就是说......除非你愿意做一些一般性的事情(在这种情况下,你拒绝的方法也会起作用)。

如果您愿意有点不精确,您可能会做的一般事情是:

  1. 将数据拆分为样本
  2. 分别并行运行样本
  3. 收集您的回归系数并将平均系数用作实际系数
  4. 计算您的预测
  5. 计算你的残差

...但这并不能再次解决您的 RAM 问题-我怀疑您是否会发现足够的速度优势以使其值得您花时间。

另见:

【讨论】:

  • 格式错误的答案会引起反对,因为它非常难以阅读
  • 格式化工作正在进行中。希望以上内容现在得到改进。
  • 我几乎可以肯定这是错误的 - Revolution R 的发行版通过英特尔 Primitives 库使用 SIMD 操作,该库确实提供 QR 分解。它还提供多核处理,尽管这可能位于英特尔库之上。仅仅因为计算是顺序的并不意味着它不能使用 SIMD 执行
  • @Rpierce 感谢您的深入回答。我忘了在问题中提到,我正在使用RRO(Revolution R Open),它改进了内置的BLAS。关于多核部分:fastLmspeedlm使用我所有的CPU,结果更快计算。所以你的意思是这可能不如 R 中的默认 lm 函数准确?
  • @Bas RRO 已经使用了多个核心,你检查过你的 CPU 看所有核心是否都在工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2017-06-26
  • 2015-06-05
  • 2010-10-13
相关资源
最近更新 更多