R ranger treeInfo 最终节点具有相同的类

问题描述

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

this 问题,我认为 prediction 变量可能是多数类(尽管对于 python 和另一个随机森林实现)。 Ranger ?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。 从图形上看,这看起来像这样

enter image description here

解决方法

我想我找到了该问题的(部分)答案,即 mtrymin.node.size 参数及其功能。

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

使用 mtrymin.node.size 可以改变这一点。但我们仍然可能会得到相同结果的分裂。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...