gbm + plyr + doMC не может открыть соединение в R

У меня есть набор данных о ценах на жилье в США. Данные охватывают 50 различных штатов. Я хочу построить GBM для каждого штата параллельным образом. Я также хочу воспользоваться аргументом cv.folds в пакете gbm в R. Я хочу сделать 3-кратное резюме, чтобы получить наилучшее значение 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.

Как я могу это исправить? Ваша помощь будет принята с благодарностью.


person Tony Kassab    schedule 21.05.2017    source источник
comment
Если вы работаете в Windows, обратите внимание, что для doMC требуется Linux. Вместо этого используйте doParallel.   -  person Hong Ooi    schedule 21.05.2017
comment
Возможно, это Вопросы и ответы по SO представляет для вас интерес.   -  person KoenV    schedule 21.05.2017
comment
Я запускаю свой скрипт на инстансе EC2 с Amazon Linux AMI, так что это не проблема Windows.   -  person Tony Kassab    schedule 21.05.2017