У меня есть два фрейма данных (здесь для воспроизводимости) trainFin1
и trainFin2
, оба взяты из одного и того же большого набора данных.
Я пытаюсь запустить на них перекрестную проверку rpart
, используя caret
в многопроцессорном режиме, используя пакет doSNOW
.
Интересно, что trainFin1
хорошо обучался на 4 процессорах (окончание примерно за 25 секунд). Но trainFin2
, кажется, застрял только на одном процессоре (наблюдается в окне диспетчера задач Windows), и я никогда не увижу, как он завершает обработку, даже спустя почти полчаса.
Мой код ниже
require(caret)
require(rpart)
load("trainFin.RData")
fitControl <- trainControl(method = "repeatedcv", number = 5, repeats = 5)
#setup parallel processing
require(doSNOW)
cl <- makeCluster(4, type = "SOCK")
registerDoSNOW(cl)
#train
set.seed(12345)
firstSet <- train(x = trainFin1[, names(trainFin1) != "Happiness"],
y = trainFin1$Happiness,
method = "rpart2", trControl = fitControl)
set.seed(12345)
secondSet <- train(x = trainFin2[, names(trainFin2) != "Happiness"],
y = trainFin2$Happiness,
method = "rpart2", trControl = fitControl)
stopCluster(cl)
Обратите внимание, что я избегал использования formula
в train
и вместо этого подавал необработанные данные, чтобы caret
не преобразовывал мои порядковые переменные в фиктивные категориальные переменные (см. ответ на этот вопрос). Когда я использовал formula
(т.е. train(Happiness ~ ., data = trainFin2, method = "rpart2", trControl = fitControl)
), проблем с параллельной обработкой не было. Но я хочу избежать использования formula
по другому вопросу.
Любые предложения о том, как я могу параллельно обрабатывать эти данные без преобразования предикторов в категориальные манекены?
rpart
наtrainFin2
безtrain
также займет целую вечность... - person Ricky   schedule 14.06.2015