Тренируйте случайный лес с каретой, используя параллель - PullRequest
0 голосов
/ 23 января 2019

Я хотел бы использовать 20 ядер ЦП, которые у меня под рукой, для обучения случайных лесов в R. Мой обычный код с использованием пакета randomForest будет таким:

rf = randomForest(Pred~., train, ntree=100, importance=TRUE)
rf

Поэтому я тренирую лес с100 деревьев, использующих коэффициент Pred с 11 уровнями и фрейм данных train с 74 числовыми характеристиками и ~ 84k наблюдений.

Идея состояла в том, чтобы ускорить это с помощью каретки с моим кодом (полученный из этого пример ):

cluster <- makeCluster(19)
registerDoParallel(cluster)
trainctrl <- trainControl(method="none", number=1, allowParallel=TRUE)
fit <- train(Driver~., train, method="parRF", trControl=trainctrl, ntree=100)
stopCluster(cluster)
registerDoSEQ()
fit

Я заменил method=cv из примера на method=none, поскольку я хочу тренироваться на всем тренировочном наборе (см. документация ),Однако я не получаю точность от fit, fit$results пусто.Если я установлю method=oob, то будет выполнена оптимизация mtry, что также даст мне точность.

Есть ли способ просто запустить первый фрагмент кода параллельно с использованием каретки без какой-либо оптимизации гиперпараметров?

1 Ответ

0 голосов
/ 13 июня 2019

Это старый вопрос, но вы можете попробовать использовать пакет doMC (он, вероятно, не будет работать в Windows).

Пример кода:

library(randomForest)
library(caret)
library(e1071)
library(doMC)

# Define the control
trControl <- trainControl(method = "cv",
    number = 10,
    search = "grid")

# Define number of parallel instances you want
registerDoMC(8)

# define parameters for grid search
tuneGrid <- expand.grid(.mtry = c(2: 5))

# train Random Forest model
rf_mtry <- train(TrainSet,yTrain,
    method = "rf",
    metric = "Accuracy",
    tuneGrid = tuneGrid,
    trControl = trControl,
    importance = TRUE,
    ntree = 300)

print(rf_mtry)

Вы также можете обратиться к этому сообщению .

...