R中的平行回归(可能有降雪)

Posted

技术标签:

【中文标题】R中的平行回归(可能有降雪)【英文标题】:parallel regression in R (maybe with snowfall) 【发布时间】: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 需要很长时间,这意味着您的设计矩阵很大,即您有许多因子水平。如果您正在采用的转换是最合适的方式,我也有点怀疑。仔细考虑普通最小二乘回归是否是实现目标的最佳方法。 特别是,包括一个变量作为连续预测器和因子预测器似乎......让我们称之为奇怪 .... 【参考方案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 工作。

【讨论】:

以上是关于R中的平行回归(可能有降雪)的主要内容,如果未能解决你的问题,请参考以下文章

R语言GAMLSS模型对艾滋病病例降雪量数据拟合预测置信区间实例可视化

R 降雪:并行应用于表格列

用降雪 R 初始化 MPI 集群

R语言中的偏最小二乘PLS回归算法

关于线性回归方程R的值问题,肿么老是1~~急!!!!

在 R 中使用降雪包做一些模拟