【问题标题】:Train random forest with caret using parallel使用并行训练带有插入符号的随机森林
【发布时间】:2019-06-16 18:36:08
【问题描述】:

我想利用手头的 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 的优化就完成了,这也给了我准确度。

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

【问题讨论】:

  • 我建议使用ranger 包。开箱即用。 method = "ranger" 插入符号。
  • 感谢您的提示,乍一看似乎很有希望。我会调查的。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 2017-03-19
    • 2015-02-18
    • 2017-01-22
    • 2018-06-13
    • 2012-10-25
    • 1970-01-01
    • 2019-07-20
    • 2016-08-10
    相关资源
    最近更新 更多