使用并行训练插入符号训练随机森林

时间:2019-01-23 08:16:10

标签: r parallel-processing random-forest r-caret

我想利用我手头的20个CPU内核在R中训练随机森林。我通常使用randomForest软件包的代码是:

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

因此,我使用具有11个级别的因子Pred和具有74个数字特征和约84k个观测值的数据帧train来训练100棵树的森林。

我们的想法是通过在我的代码中使用插入符号(从此example派生)来加快速度:

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,因为我想对整个训练集进行训练(请参见documentation)。但是我从fit得不到准确度,fit$results为空。如果我设置了method=oob,则会对mtry进行优化,这也会给我带来准确性。

有没有一种方法可以使用插入符号在没有任何超参数优化的情况下简单地并行运行第一个代码段?

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但是您可以尝试使用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)

您也可以参考this post