1. 概述

在本篇文章中,我们将探讨一个非常流行的机器学习算法——随机森林(Random Forest),并深入理解其一个重要概念:袋外误差(Out-of-Bag Error)

同时,我们也会简要介绍与随机森林相关的几个术语,例如决策树(Decision Tree)、装袋(Bagging)和自助法(Bootstrapping)。

2. 随机森林简介

随机森林是一种用于分类和回归任务的集成学习方法。它通过构建多个决策树来形成一个综合预测模型,具有良好的准确性、快速的训练速度以及良好的可解释性,是当前最受欢迎的机器学习算法之一。

首先,随机森林使用了一种叫做装袋(Bagging)的集成技术。
Bagging 是一种用于降低模型在噪声数据上训练时方差的技术。它通过创建多个模型,每个模型都能补偿其他模型的错误。简而言之,随机森林由许多决策树组成,最终的预测结果是这些树的多数投票(分类)或平均预测(回归):

rf

其次,随机森林还使用了一种叫做自助法(Bootstrapping)的技术。
这是统计学中常用的一种方法,用于减少机器学习模型的方差。简单来说,它会从原始数据集中随机采样一个子集用于构建每棵决策树,且采样是有放回的(with replacement),这意味着同一个样本可能被多次选中。

最后,为了进一步提高模型的泛化能力,随机森林还限制了用于节点分裂的特征数量。在构建决策树时,每次分裂只考虑一个随机选择的特征子集。在 Python 的 scikit-learn 库中,这个超参数被称为 max_features,通常推荐设置为:

  • 分类任务:max_features = sqrt(n)
  • 回归任务:max_features = n / 3

其中 n 表示特征总数。

3. 袋外误差(Out-of-Bag Error)

在机器学习和数据科学中,我们希望构建一个在新数据上表现良好的模型。为了评估模型的泛化能力,有很多方法可以使用,袋外误差(OOB Error) 就是其中一种。

3.1. 定义

OOB Error 利用了随机森林中 Bootstrapping 的特性。由于 Bootstrapping 是有放回采样,因此每棵树训练时只使用了原始数据集中的一部分样本,剩下的未被选中的样本就被称为“袋外样本”(Out-of-Bag Samples)

我们可以利用这些未被使用的样本来评估每棵树的预测性能。最终,将所有树在各自袋外样本上的预测结果进行汇总,就可以得到整个随机森林模型的 OOB 误差。

这种评估方式相比传统的训练集/测试集划分或交叉验证更为高效,而且结果也具有较高的可信度。

3.2. 袋外样本出现的概率

理论上,在数据集足够大的情况下,大约有 36.8% 的样本不会被选中用于某棵树的训练,这些就是袋外样本。

我们可以通过概率公式来解释:

  • 从一个大小为 n 的训练集中选择一个样本的概率是 1/n
  • 不选中该样本的概率是 1 - 1/n
  • 经过 n 次有放回的采样后,该样本未被选中的概率是 (1 - 1/n)^n

n 很大时,极限值为:

(1)   $$ \lim_{n \to \infty}\left(1-\frac{1}{n}\right)^{n} = e^{-1} \approx 0.36 $$

因此,大约 36% 的样本会被保留用于 OOB 误差的计算。

3.3. 伪代码实现

下面是一个用于计算 OOB 误差的伪代码示例:

algorithm OutOfBagError(S, k):
    // INPUT
    //    S = 用于训练的数据集
    //    k = 随机森林中树的数量
    // OUTPUT
    //    使用 OOB 预测计算出的平均性能或误差

    初始化训练数据集 S
    构建一个包含 k 棵树的随机森林

    使用数据集 S 训练随机森林

    for 每棵决策树 Ti in 随机森林:
        Si = 用于训练 Ti 的自助采样数据集
        Sc = S \ Si (即 Ti 的 OOB 样本)
        Pi = 使用 Ti 对 Sc 的预测结果

    使用预测结果 P = {P1, P2, ..., Pk} 计算平均性能或误差

    return 平均性能或误差

更直观地展示整个过程如下图所示:

out of bag

4. 总结

本文我们介绍了如何使用袋外误差(OOB Error)来评估随机森林模型的性能。

OOB Error 是一种高效的模型验证方法,其效果在很多论文中被实验证明与使用测试集相当。而且,它不需要单独划分训练集和测试集,因此在小数据集上尤其有用,可以让模型在更多数据上进行训练,提升模型的泛化能力。

✅ 优点总结:

  • 不需要额外划分测试集
  • 实现简单,计算开销小
  • 在小数据集上表现良好

❌ 注意事项:

  • OOB 误差的估计可能略高于交叉验证的结果
  • 对于高维稀疏数据,OOB 误差可能不够准确

💡 踩坑提醒:
如果你在使用随机森林时忽略了 OOB 误差,那你可能错失了一个非常方便且有效的模型评估工具。建议在训练模型时始终启用 OOB 误差计算,特别是在数据量较小的情况下。


原始标题:Out-of-bag Error in Random Forests

« 上一篇: ASCII 编码简介