【问题标题】:Types of Training vs Test Error for Random Forest Classification Algorithm (Assessing Variance)随机森林分类算法的训练类型与测试误差(评估方差)
【发布时间】:2022-01-24 16:14:46
【问题描述】:

如果可能,我有 2 个问题想确定(问题以粗体显示):

我最近了解(我希望)随机森林分类算法,并尝试使用 Python 上的 sklearn 将其应用于从卫星图像派生的相当大的像素数据集(特征是不同的波段,并且标签是我自己概述的特定特征,即植被、云等)。然后我想了解模型是否遇到了方差问题,所以我想到的第一个想法就是比较训练数据和测试数据。

现在这就是让我感到困惑的地方 - 我知道有很多不同的帖子:

  1. 与袋外 (OOB) 错误相比,应该/不应该如何使用 CV 错误
  2. 如何按照设计,随机森林分类器的训练误差几乎总是 ~0(即,在训练数据上拟合我的模型并使用它在同一组训练数据上进行预测) - 无论如何似乎都是如此树的深度

关于第 2 点,我似乎永远无法比较我的训练和测试误差,因为前者总是很低,因此我决定使用 OOB 误差作为整个模型的“代表性”训练误差。然后我意识到 OOB 错误可能是一个伪测试错误,因为它本质上是在它们没有专门学习的点上测试树(在自举树的情况下),所以我默认 CV 错误是我新的“代表性”训练错误整个模型。

回顾 CV error 的使用,我最初将它用于超参数调整(例如,最大树深度、树数、标准类型等),所以我再次怀疑自己是否应该将其用作我的官方训练错误与我的测试错误进行比较。

更糟糕的是,我很难根据网络上的帖子来验证我认为是正确的,因为每个帖子只回答一小部分并且可能相互矛盾,所以有人会帮助我的 关于将什么用作我的正式训练错误并将与我的测试错误进行比较的困境

我的第二个问题围绕着 OOB 错误如何可能是基于引导期间未选择的数据点的伪测试错误。如果这是真的,公平地说,如果禁用引导,这不成立(该算法在技术上仍然是一个随机森林,因为每个树的特征仍然是随机子采样的,只是相关性树之间可能更高)?

谢谢!!!!

【问题讨论】:

    标签: python machine-learning random-forest supervised-learning


    【解决方案1】:

    通常,您希望将数据集明确分为训练、验证和测试。训练是输入模型的数据,验证是在模型学习时监控模型的进度,测试数据是查看模型对未见数据的泛化程度。正如您所发现的,根据应用程序和算法,您可以混淆训练和验证数据,甚至完全放弃验证数据。对于随机森林,如果您想放弃使用不同的验证集而只使用 OOB 来监控进度,那很好。如果你有足够的数据,我认为拥有一个独特的验证集仍然是有意义的。无论如何,您仍然应该保留一些数据用于测试。根据您的数据,您甚至可能需要注意如何拆分数据(例如,标签中是否存在不均匀性)。

    关于比较训练集和测试集的第二点,我想你可能会感到困惑。测试集真的是你所关心的。您可以比较两者以查看是否过度拟合,以便您可以更改超参数以进行更多泛化,但除此之外,重点是测试集是唯一真实的评估。如果您的数据集非常小,您可能需要使用分层 CV 等 CV 方案引导多个模型,以生成更准确的测试评估。

    【讨论】:

    • 嗨安德鲁,感谢您的澄清!
    猜你喜欢
    • 2019-04-24
    • 2019-08-12
    • 1970-01-01
    • 2021-07-10
    • 2018-12-21
    • 1970-01-01
    • 2016-01-24
    • 2021-09-29
    • 2019-10-05
    相关资源
    最近更新 更多