gbm + plyr + doMC无法在R中打开连接

时间:2017-05-21 03:44:59

标签: r foreach plyr gbm domc

我有一份关于美国房价的数据。数据跨越50种不同的状态。我想以并行方式构建每个状态的GBM。我还想利用R中cv.folds包中的gbm参数。我想做一个3倍的CV来获得最佳n.trees值。

我的代码:

library(gbm)
library(plyr)
library(doMC)
doMC::registerDoMC(cores = detectCores())

gbms = dlply(.data = df, .variables = "State", .fun = function(df_temp) {
    gbm(log(Price) ~ ., 
        data = df_temp[, c(features, outcome)],
        distribution = "gaussian",
        n.trees = 5000,
        shrinkage = 0.001,
        interaction.depth = 3,
        n.minobsinnode = 10,
        bag.fraction = 0.5,
        train.fraction = 0.8,
        cv.folds = 3, # if I turn this to 0, the code runs fine
        keep.data = FALSE
        )
    }, .parallel = TRUE
  )

上面的代码返回以下错误:

Error in do.ply(i) : task 1 failed - "cannot open the connection"

但是,如果我将cv.folds = 3更改为cv.folds = 0,则代码运行正常并且我获得了50 GBM,但它们未针对n.trees进行优化。

请注意,如果我设置.parallel = FALSE,那么代码工作正常,但由于它会在单个核心上运行,因此需要很长时间。当我尝试用foreach构建模型时,我也得到了同样的错误。

我该如何解决这个问题?非常感谢您的帮助。

0 个答案:

没有答案