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



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

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

现在,我开始感到困惑了——我知道有很多关于的不同帖子

  1. 与开箱(OOB(错误相比,应如何使用CV错误
  2. 根据设计,随机森林分类器的训练误差几乎总是~0(即,将我的模型拟合在训练数据上,并使用它在同一组训练数据上进行预测(——似乎与树的深度无关

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

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

更糟糕的是,我很难根据网上的帖子来验证我所认为的是真的,因为每个帖子只回答了一小部分,可能会相互矛盾,所以有人能帮助我解决我的困境,把什么作为我的官方培训错误,并将其与我的测试错误进行比较吗?

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

谢谢!!!!

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

至于你关于比较训练和测试集的第二点,我想你可能会感到困惑。测试集才是你真正关心的。你可以比较两者,看看你是否过拟合,这样你就可以改变超参数来进行更多的推广,但除此之外,关键是测试集是唯一真实的评估。如果你有一个非常小的数据集,你可能需要使用CV方案(如分层CV(引导一些模型,以生成更准确的测试评估。

最新更新