【问题标题】:parallel regression in R (maybe with snowfall)R中的平行回归(可能有降雪)
【发布时间】:2016-06-26 06:14:58
【问题描述】:

我正在尝试并行运行 R 来运行回归。我正在尝试使用降雪库(但对任何方法都持开放态度)。目前,我正在运行以下回归,这需要很长时间才能运行。有人可以告诉我怎么做吗?

 sales_day_region_ctgry_lm <- lm(log(sales_out+1)~factor(region_out) 
             + date_vector_out + factor(date_vector_out) +
             factor(category_out) + mean_temp_out)

我已经开始了以下路径:

library(snowfall)
sfInit(parallel = TRUE, cpus=4, type="SOCK")

wrapper <- function() {
return(lm(log(sales_out+1)~factor(region_out) + date_vector_out +
               factor(date_vector_out) + factor(category_out) +   mean_temp_out))
}

output_lm <- sfLapply(*no idea what to do here*,wrapper)
sfStop()
summary(output_lm)

但这种方法充满了错误。

谢谢!

【问题讨论】:

  • 这样做会让您重复 4 次相同的模型,而不是 1/4 次适合的模型。
  • 如果lm 需要很长时间,这意味着您的设计矩阵很大,即您有许多因子水平。如果您正在采用的转换是最合适的方式,我也有点怀疑。仔细考虑普通最小二乘回归是否是实现目标的最佳方法。
  • 特别是,包括一个变量作为连续预测器和因子预测器似乎......让我们称之为奇怪 ....

标签: r parallel-processing regression snowfall


【解决方案1】:

partools 包通过其calm() 函数提供了一种简单、现成的并行线性回归实现。 (“ca”前缀代表“块平均”。)

在你的情况下——抛开@Roland关于混合因子和连续预测变量的正确评论——解决方案应该很简单:

library(partools)
#library(parallel) ## loads as dependency

cls <- makeCluster(4) ## Or, however many cores you want/have.

sales_day_region_ctgry_calm <- 
  calm(
    cls, 
    "log(sales_out+1) ~ factor(region_out) + date_vector_out + 
     factor(date_vector_out) + factor(category_out) + mean_temp_out, 
     data=YOUR_DATA_HERE"
    )

请注意,模型调用是在引号中描述的。进一步注意,如果数据以任何方式(例如按日期)排序,您可能需要先随机化数据。有关详细信息,请参阅partools vignette

【讨论】:

    【解决方案2】:

    由于您要拟合一个大模型(而不是几个小模型),并且您正在使用线性回归,因此获得并行性的一种快速简便的方法是使用多线程 BLAS。 Microsoft R Open (previously known as Revolution R Open) 之类的东西应该可以解决问题。*

    * 披露:我为 Microsoft/Revolution 工作。

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 2011-11-12
      • 2018-10-21
      • 2015-10-16
      • 2016-05-21
      • 2020-10-02
      • 2019-08-09
      • 2017-01-02
      • 2020-02-14
      相关资源
      最近更新 更多