1

当我将 ranger 用于分类模型并treeInfo()提取树时,我发现有时拆分会导致两个相同的终端节点。这是预期的行为吗?为什么在最终节点相同的情况下引入拆分是有意义的?

这个问题,我认为prediction变量可能是多数类(尽管对于 python 和另一个随机森林实现)。游侠?treeInfo文档说它应该是预测的类。

MWE

library(ranger)

data <- iris
data$is_versicolor <- factor(data$Species == "versicolor")
data$Species <- NULL

rf <- ranger(is_versicolor ~ ., data = data,
             num.trees = 1, # no need for many trees in this example
             max.depth = 3, # keep depth at an understandable level
             seed = 1351, replace = FALSE)
treeInfo(rf, 1)
#>   nodeID leftChild rightChild splitvarID splitvarName splitval terminal prediction
#> 1      0         1          2          2 Petal.Length     2.60    FALSE       <NA>
#> 2      1        NA         NA         NA         <NA>       NA     TRUE      FALSE
#> 3      2         3          4          3  Petal.Width     1.75    FALSE       <NA>
#> 4      3         5          6          2 Petal.Length     4.95    FALSE       <NA>
#> 5      4         7          8          0 Sepal.Length     5.95    FALSE       <NA>
#> 6      5        NA         NA         NA         <NA>       NA     TRUE       TRUE
#> 7      6        NA         NA         NA         <NA>       NA     TRUE       TRUE
#> 8      7        NA         NA         NA         <NA>       NA     TRUE      FALSE
#> 9      8        NA         NA         NA         <NA>       NA     TRUE      FALSE

在此示例中,最后四行(nodeID 为 5 和 6,以及 7 和 8 的最终节点)具有预测TRUEFALSE。从图形上看,这看起来像这样

在此处输入图像描述

4

1 回答 1

0

我想我找到了这个问题的(部分)答案,即mtryand min.node.sizeargumenta 及其功能。

由于随机森林mtry在每次拆分时仅选择变量,因此最终拆分可能仅考虑变量,这些变量不会以导致最大 gini 差异(或选择的任何度量标准)但仍在每个最终节点中的方式拆分数据,给定的类可能占上风。

玩弄mtrymin.node.size可以改变这一点。但是我们仍然可能会得到相同的结果。

于 2021-05-20T11:17:31.673 回答