随机森林分类算法的训练类型与测试误差(评估方差)

问题描述 投票:0回答:1

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

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

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

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

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

回顾CV误差的用法,我最初将其用于超参数调整(例如,最大树深度、树数量、标准类型等),因此我再次怀疑自己是否应该将其用作我的正式训练与我的测试错误进行比较的错误。

更糟糕的是,我很难根据网络上的帖子来验证我认为正确的内容,因为每个答案只回答了一小部分,并且可能相互矛盾,所以有人愿意帮助我解决我的困境吗?用作我的官方训练错误,将与我的测试错误进行比较

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

machine-learning scikit-learn random-forest supervised-learning
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.