首页 > 解决方案 > 使用并行训练带有插入符号的随机森林

问题描述

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

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

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

这个想法是通过在我的代码中使用插入符号来加快速度(来自这个例子):

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为我确实想在整个训练集上进行训练(请参阅文档)。但是我没有从 , 中得到准确度fitfit$results是空的。如果我设置method=oob了一个优化mtry完成,这也给了我准确性。

有没有一种方法可以简单地使用插入符号并行运行第一个代码片段而无需任何超参数优化?

标签: rparallel-processingrandom-forestr-caret

解决方案


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

你也可以参考这篇文章


推荐阅读