【问题标题】:How to plot an OOB error vs the number of trees in random forest如何绘制 OOB 错误与随机森林中的树数
【发布时间】:2019-07-25 10:38:06
【问题描述】:

我拟合了一个随机森林模型。我已经使用了 randomForestranger 包。我没有调整森林中的树木数量,我只是将其保留为默认数量,即 500。现在我想看看它是否足够,即错误是否达到了稳定水平。所以我相信我需要提取单个树,随机取例如 100、200、300、400 和最后 500 棵树,从中取出 oob 树并计算 100、200、...树的 OOB 错误连续.然后我可以绘制 OOB 错误与树的数量。我发现randomForest::getTreeranger::treeInfo 返回一个树的data.frame,但我不知道那里是什么。更重要的是ranger::treeInfo 返回一个 NA 为 50% 的数据帧,整体输出更难阅读。 所以我的问题是:

  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)

【问题讨论】:

    标签: r random-forest


    【解决方案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-树的轮廓,即哪些节点在哪些标准上分裂,哪些节点与哪些节点相连,每个包使用的表示方式略有不同,以下示例来自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
    

    基本上是这样的描述:

    【讨论】:

    • 谢谢!不同的颜色代表什么?以及如何使用ranger 包来完成?
    • 图例将指示每种颜色代表什么,您可以仅通过调用plot(x = 1:nrow(iris.rf$err.rate), y = iris.rf$err.rate[,1], type='l')绘制OOB,如果您查看iris.rf$err.rate可能更容易理解(模型的错误率),至于ranger,不幸的是,我不熟悉为每棵树提取OOB的方法。
    猜你喜欢
    • 2017-09-24
    • 2019-03-14
    • 2018-06-06
    • 2014-05-05
    • 2018-09-15
    • 2017-03-25
    • 2014-05-25
    • 2020-09-18
    • 2017-05-13
    相关资源
    最近更新 更多