Out of Bag Error 使 CV 在随机森林中变得不必要?

机器算法验证 交叉验证 随机森林 过拟合
2022-01-30 19:48:00

我对随机森林相当陌生。过去,我总是将fit vs testfit vs train的准确性进行比较,以检测任何过度拟合。但我只是在这里读到

“在随机森林中,不需要交叉验证或单独的测试集来获得测试集误差的无偏估计。它是在内部估计的,在运行期间......”

上面的小段可以在袋外(oob)误差估计部分下找到。这个 Out of Bag Error 概念对我来说是全新的,有点令人困惑的是我的模型中的 OOB 错误是 35%(或 65% 的准确度),但是,如果我对我的数据应用交叉验证(只是一个简单的坚持方法)并将拟合与测试拟合与训练进行比较,我分别得到 65% 的准确度和 96% 的准确度。根据我的经验,这被认为是过度拟合,但 OOB 包含 35% 的错误,就像我的拟合与测试错误一样。我过拟合了吗?我是否应该使用交叉验证来检查随机森林中的过度拟合?

简而言之,当我的拟合与训练表明我过度拟合时,我不确定是否应该相信 OOB 得到测试集错误的无偏错误!

2个回答
  • 训练错误(如predict(model, data=train))通常是无用的。除非您对树进行(非标准)修剪,否则根据算法的设计,它不能远高于 0随机森林使用决策树的引导聚合,已知这些决策树严重过度拟合。这就像 1-nearest-neighbour 分类器的训练错误。

  • 然而,该算法提供了一种非常优雅的方法来计算袋外误差估计,它本质上是聚合模型误差的自举估计)。袋外误差是聚合预测的估计误差1e在没有这种特殊情况的情况下训练的树的一小部分。
    如果输入数据行之间没有依赖关系,则为袋外错误聚合的模型将仅是独立的。即每一行=一个独立的案例,没有分层数据结构/没有聚类/没有重复测量。

    因此袋外错误与交叉验证错误并不完全相同(用于聚合的树更少,训练用例副本更多),但出于实际目的,它已经足够接近了。

  • 为了检测过度拟合,将袋外错误与外部验证进行比较是有意义的。但是,除非您了解数据中的聚类,否则“简单”的交叉验证错误将容易出现与袋外错误相同的乐观偏差:拆分是根据非常相似的原则完成的。
    您需要将袋外验证或交叉验证与错误进行比较,以便精心设计的测试实验检测到这一点。

袋外错误很有用,可能会取代其他性能估计协议(如交叉验证),但应谨慎使用。

与交叉验证一样,使用袋外样本的性能估计是使用未用于学习的数据计算的。如果数据已以跨样本传递信息的方式进行处理,则估计将(可能)有偏差。想到的简单示例是执行特征选择或缺失值插补。在这两种情况下(尤其是对于特征选择),数据都使用来自整个数据集的信息进行转换,从而使估计值产生偏差。