R中的并行回归(可能与降雪有关)
我试图并行运行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)
但是这种方法充满了错误。
谢谢!
partools软件包通过其calm()
函数提供了一个简单的,现成的并行线性回归实现。 (“ca”前缀代表“块平均”。)
在你的情况中 - 抛开罗兰关于混合因子和连续预测因子的正确评论 - 解决方案应该如下简单:
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。
由于您正在拟合一个大型模型(而不是几个小型模型),并且您正在使用线性回归,因此获得并行性的一种快捷方式是使用多线程BLAS。 像微软R开放(以前称为革命R公开)应该做的伎俩。*
*披露:我为微软/革命工作。
链接地址: http://www.djcxy.com/p/53433.html