如何使用parRF方法使随机林运行得更快

mql*_*ner 4 parallel-processing r random-forest r-caret

我想在大型数据集上运行随机森林:100k*400.当我使用随机森林时需要花费很多时间.我可以使用插入包中的parRF方法来减少运行时间吗?什么是正确的语法?这是一个示例数据帧:

dat <- read.table(text = " TargetVar  Var1    Var2       Var3
 0        0        0         7
 0        0        1         1
 0        1        0         3
 0        1        1         7
 1        0        0         5
 1        0        1         1
 1        1        0         0
 1        1        1         6
 0        0        0         8
 0        0        1         5
 1        1        1         4
 0        0        1         2
 1        0        0         9
 1        1        1         2  ", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

我试过了:

library('caret')
m<-randomForest(TargetVar ~ Var1 + Var2 + Var3, data = dat, ntree=100, importance=TRUE, method='parRF')
Run Code Online (Sandbox Code Playgroud)

但我没有看到太多差异.有任何想法吗?

Len*_*ood 9

您没有看到差异的原因是您没有使用该caret包.您可以使用该library()命令将其加载到您的环境中,但随后运行的randomForest()不使用插入符号.

我建议首先创建一个仅包含输入变量的数据框(或data.table),以及一个包含结果的向量.我指的是最近更新的插入符号文档.

x <- data.frame(dat$Var1, dat$Var2, dat$Var3)
y <- dat$TargetVar
Run Code Online (Sandbox Code Playgroud)

接下来,验证您是否有parRF可用的方法.直到我将我的插入包更新到最新版本(6.0-29)之后我才这样做.

library("randomForest")
library("caret")
names(getModelInfo())
Run Code Online (Sandbox Code Playgroud)

你应该parRF在输出中看到.现在您已准备好创建训练模型.

library(foreach)

rfParam <- expand.grid(ntree=100, importance=TRUE)

m <- train(x, y, method="parRF", tuneGrid=rfParam)
Run Code Online (Sandbox Code Playgroud)