随机森林算法步骤背后的动机

机器算法验证 机器学习 分类 随机森林
2022-03-15 23:45:42

我熟悉的构建随机森林的方法如下:(来自http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

要在森林中建造一棵树,我们:

  1. 引导一个大小为 N 的样本,其中 N 是我们训练集的大小。使用这个自举样本作为这棵树的训练集。
  2. 在树的每个节点上随机选择我们 M 个特征中的 m 个。选择这 m 个特征中最好的一个进行拆分。(其中 m 是我们随机森林的参数)
  3. 尽可能最大程度地种植每棵树——即不修剪。

虽然这个算法在程序层面是有意义的并且肯定会产生良好的结果,但我不清楚步骤 1、2 和 3 背后的理论动机是什么。有人可以解释是什么促使某人提出这个程序以及为什么它效果这么好?

例如:为什么我们需要执行第 1 步?看起来我们并没有因为其通常的减少方差的目的而自举。

1个回答

集成方法(例如随机森林)需要在各个基本分类器所生长的数据集中存在一些变化元素(否则随机森林最终会产生过于相似的树木森林)。由于决策树对训练集中的观察结果高度敏感,我认为改变观察结果(使用引导程序)是获得所需多样性的自然方法。显而易见的替代方法是改变使用的特征,例如在原始特征的子集上训练每棵树。使用引导样本还允许我们估计袋外 (OOB) 错误率和变量重要性。

2本质上是向森林注入随机性的另一种方式。它还对降低树之间的相关性(通过使用低 mtry 值)产生影响,权衡(可能)恶化预测能力。使用太大的 mtry 值会导致树变得越来越相似(在极端情况下,你最终会出现 bagging)

我认为不修剪的原因更多是因为它没有必要。对于单个决策树,您通常会对其进行修剪,因为它非常容易过度拟合。然而,通过使用 bootstrap 样本并种植许多树,随机森林可以种植出个体很强但彼此之间没有特别相关性的树。基本上,单个树是过拟合的,但如果它们的误差不相关,那么森林应该是相当准确的。

它运作良好的原因类似于孔多塞的陪审团定理(以及提升等方法背后的逻辑)。基本上你有很多弱学习器,它们只需要比随机猜测稍微好一点。如果这是真的,您可以继续添加弱学习器,并且在极限情况下,您将从您的集成中获得完美的预测。显然,这是由于学习者的错误变得相关而受到限制,这阻碍了集成的性能提高。