我想自动调整随机森林模型,因为我的变量会不断变化。我正在使用iris
数据集。
我的代码是
jk = iris
library(randomForest)
library(caret)
fgl.res <- tuneRF(lm[,-5], lm[,5], stepFactor=1.5)
o/p:
mtry = 2 OOB error = 5.33%
Searching left ...
Searching right ...
mtry = 3 OOB error = 4%
0.25 0.05
mtry = 4 OOB error = 5.33%
-0.3333333 0.05
上面我想在fgl.res
代码中自动选择Species
列索引,即iris
数据集中的5,并插入fgl.res
代码。
然后使用第一行fgl.res
输出(o / p)并取值"mtry = 2 OOB error = 5.33% "
并在随机林代码中使用它,即将值赋给mtry
和{{ 1}}如下图所示:
oob.error
我尝试了很多方法,但没有解决如何自动将值插入mod2<-randomForest(Species~., data=lm, ntree=50, mtry=2, oob.error=0.0533)
输出的代码。
答案 0 :(得分:2)
我不知道我是否正确理解了您的问题,但您可能会使用这种方法
使用tuneRF时,必须选择具有最低OOB错误的mtry。
在进入tuneRF函数后,我使用invisible(capture.output(...))
函数隐藏显示控制台中的任何输出。
示例:
# load library
library(randomForest)
library(caret)
# data
data_iris = iris
# repeat the analysis
set.seed(4543)
# tuneRF
invisible(capture.output(fgl.res <- tuneRF(x = data_iris[,-5], y=
data_iris[,5], stepFactor=1.5)))
# choose the best mtry based on the lowest OOB error
best_mtry <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 1]
# choose the lowest OOB error
best_oob <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 2]
# caluclate RF
mod2<-randomForest(Species~., data=data_iris, ntree=50, mtry=best_mtry,
oob.error=best_oob)
如果您只想提取第一行fgl.res输出并获取mtry和OOB错误值,则必须使用:
# choose the best mtry based on the lowest OOB error
best_mtry <- fgl.res[1, 1]
# choose the lowest OOB error
best_oob <- fgl.res[1, 2]
我知道您在10个月前发布了此问题,但也许这种方法对其他用户有用。