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中的平行回归(可能有降雪)的主要内容,如果未能解决你的问题,请参考以下文章