如何绘制OOB错误与随机森林中树木的数量

时间:2019-03-04 06:36:28

标签: r random-forest

我安装了一个随机森林模型。我同时使用了randomForestranger软件包。我没有调整森林中的树木数量,我只给它保留了默认数量,即500。现在我想看看是否足够,即错误是否已经达到平稳状态。因此,我认为我需要提取单个树,随机抽取例如100、200、300、400,最后是500棵树,从中抽取oob树,并连续计算100、200,...树的OOB误差。然后,我可以绘制OOB误差与树数的关系图。我发现randomForest::getTreeranger::treeInfo返回了一个data.frame的树,但是我不知道那里是什么。更重要的是,ranger::treeInfo返回一个具有50%NA的数据帧,并且整体输出甚至更难以读取。 所以我的问题是:

  1. 如果我已经有一个拥有500棵树的随机森林,如何绘制OOB误差与森林中使用的树木数量的关系?
  2. 为什么ranger::treeInfo拥有50%的NA,而实际上只有那些行具有预测?

这是最小的示例:

mpg2 <- mpg %>% 
  mutate(is_suv = as.factor(class == 'suv')) %>% 
  select(-class)
mpg_model <- ranger::ranger(is_suv ~ ., data = mpg2)
ranger::treeInfo(mpg_model, tree = 100)

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的只是plot(.),如本例所示:

library(randomForest)

set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance = TRUE, proximity=TRUE)
# plot the model
plot(iris.rf)
# add legend to know which is which
legend("top", colnames(iris.rf$err.rate), fill=1:ncol(iris.rf$err.rate))

对于randomForest::getTreeranger::treeInfo,它们与OOB无关,它们只是描述了-chosen-tree的轮廓,即哪个节点在哪个节点上划分了标准,并且连接了哪些节点,每个程序包使用的表示形式略有不同,例如以下示例来自ranger::treeInfo

     nodeID leftChild rightChild splitvarID splitvarName splitval terminal prediction
1       0         1          2          4  Petal.Width     0.80    FALSE       <NA>
2       1        NA         NA         NA         <NA>       NA     TRUE     setosa

基本上是对以下内容的描述:

enter image description here