ranger 中的 extratrees 选项到底是什么?

机器算法验证 r 机器学习 随机森林
2022-03-24 00:49:30

据我了解,splitrule = “extratrees”ranger中的选项是Geurts et al (2006)极其随机树的实现。

他们在论文中指出:

在每个树节点上,这与随机选择一定数量的属性相结合,其中确定了最好的一个。在极端情况下,该方法在每个节点处随机选取单个属性和切点,从而构建完全随机的树,其结构独立于学习样本的目标变量值。

  1. 如果我运行rangersplitrule = "extratrees"没有指定mtry,我会在结果对象中看到mtry = 8. 该算法是否还暗示mtry文章中所述的随机选择?

  2. Wikipedia上有一小部分关于极其随机的树。与论文相比,它没有提到选择的特征数量是随机的,但可以指定,这与我在ranger中看到的一致。然后我想知道:然后我是否仍然可以在撰写论文时根据 Geurts 等人在 Ranger 中实现这种极其随机的树,或者这是默认树和极其随机树的“混合”

  3. 维基百科还说:

    首先,使用整个学习样本(而不是引导样本)训练每棵树

尽管如此,我在ranger的 fit 对象中得到了袋外错误,在我的理解中,如果使用整个训练数据,这是不可能的。除非实际上仍然执行 bagging,否则只有交叉验证错误是可能的。

所以,基本上我的问题是:在ranger选项下究竟实现了什么splitrule = "extratrees",为什么它们偏离了原始论文?

1个回答

您的理解是正确的,extraTrees确实实现了 Geurts 等。(2006)极其随机的树的实现extraTrees已经在 Github 关于该问题的线程中进行了详细讨论,因此我强烈建议您在此处进一步阅读。

关于提出的具体问题:

  1. 是的,但请继续阅读!默认情况下,使用相同数量的候选mtry者,这被计算为数字变量的(四舍五入)平方根。ranger使用特定数字是有意义的,mtry因为这样可以有效地对其进行正则化。从理论上讲,我们确实应该将选择限制为在每棵树内开始的随机子集。然而,由于要拆分的属性的选择以及拆分本身是随机的,因此这种差异主要是一种形式。
  2. 是的你可以。到目前为止,Geurts 等人的主要新颖之处。是通过完全随机选择切点来分割节点的方式;这是ranger肯定会发生的事情。您可以/应该在论文中指定使用的实现是ranger为了减轻任何不确定性。
  3. 你是对的; 默认值在这里伤害了我们。也就是说,如果在训练期间,我们不带替换地进行采样(即我们设置replace = FALSE)以及将观察的分数设置为 1(即我们设置sample.fraction = 1),我们将不会出现 OOB 错误,并且森林是在整个样本上进行训练的。您可能想在ranger的 github 存储库中创建一个关于此的新问题。这主要是重新调整默认值的情况,splitrule='extraTrees'但我们也可以手动进行。

回顾一下:如果我们使用rf <- ranger( ..., splitrule = "extratrees", replace = FALSE, sample.fraction = 1),我们可以肯定地说我们使用 Geurts 等人。执行。尊重极端随机树和“标准”随机森林之间的所有核心差异。

关于是否报告 OOB 的次要观点:虽然 OOB 估计确实可以替代单独测试集的存在,但我发现是否存在不同的测试集和/或我们使用重复的 CV 或自举会更清楚。它使与其他方法(例如简单的线性模型或 SVM)的比较更具可比性和连贯性。