Функция подгонки каретки с настройкой параметров и многопроцессорностью - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь приспособить случайный лес к настройке параметров с помощью Caret / R.Это работает, но если я пытаюсь в многоядерной обработке, это больше не работает.Я использую Windows в качестве ОС.

# define parameters to tune
customRF <- list(type = "Classification", library = "randomForest", loop = NULL)
customRF$parameters <- data.frame(parameter = c("mtry", "ntree","nodesize"), class = rep("numeric", 3), label = c("mtry", "ntree","nodesize"))
customRF$grid <- function(x, y, len = NULL, search = "grid") {}
customRF$fit <- function(x, y, wts, param, lev, last, weights, classProbs, ...) {
  randomForest(x, y, mtry = param$mtry, ntree=param$ntree, nodesize=param$nodesize, ...)
}
customRF$predict <- function(modelFit, newdata, preProc = NULL, submodels = NULL)
  predict(modelFit, newdata)
customRF$prob <- function(modelFit, newdata, preProc = NULL, submodels = NULL)
  predict(modelFit, newdata, type = "prob")
customRF$sort <- function(x) x[order(x[,1]),]
customRF$levels <- function(x) x$classes

# define values of parameters to tune

library("doParallel")

Sys.time()
control <- trainControl(method="repeatedcv", number=10,classProbs = TRUE,summaryFunction = twoClassSummary)
tunegrid <- expand.grid(.mtry=c(1,5,11), .ntree=c(20,30,40), .nodesize=c(1, 5, 10))
set.seed(123)

# train model in parallel
registerDoParallel(5)
getDoParWorkers()

Sys.time()
custom <- caret::train(churn2~., data=train05, method=customRF, metric="ROC", tuneGrid=tunegrid,
                       trControl=control,allowParallel= TRUE)
Sys.time()

registerDoSEQ()

При обработке parralel я получаю следующее сообщение:

Предупреждение: в nominalTrainWorkflow (x = x, y = y, wts =weights, info = trainInfo,: в пересчитанных показателях производительности отсутствовали значения.

Мои результаты также неверны. Один и тот же AUC дается для каждого пробного кода. Это не относится к многоядерной обработке.

Я проверил другие вопросы, такие как Предупреждающее сообщение: "пропущенные значения в пересчитанных показателях производительности" в caret train () с использованием rpart или parRF на каретке, не работающей для более чем одного ядра , но это не решает мою проблему.

...