澄清一下:你在训练数据上建立了一个随机森林,并得到了一些似乎没有过拟合的结果,因为 CV 和测试结果是相似的。第二个 RF 建立在第一个 RF 的预测和一些其他附加功能的基础上。CV 训练数据的误差非常低,而测试数据的误差非常高。
现在我们将分析第二个 RF 的性能,而不考虑它是如何构建的。通常,如果您在训练集上拟合数据非常好,而在测试集上拟合得非常差,这意味着您只是过度拟合数据。当您的模型从数据中学到太多东西时,就会发生这种情况。关键是在您的训练数据中,您有两种信息。第一个是数据的真实结构,第二个是数据周围的噪音,假设您有足够的数据并且您的模型能够处理有用的结构。理想的情况发生在你只学习有用的结构而忽略噪音的情况下。当这种情况发生时,你将在训练和测试数据中出现接近错误,这意味着你的模型学到的至少几乎只是有用的数据。当你学得太多,这意味着你一起学习有用和噪音,
现在第一个学习者看起来并没有过度拟合。当然,这并不总是意味着你不能做得更好。这仅意味着您所学习的是一种结构,该结构也可以在测试数据中找到,因此具有预测能力。因此,您的目标是提高第一个预测器的性能是可以理解的。一种方法是尝试改进该预测器,您可以通过研究该模型的学习方式来搜索它。例如,您可以研究该模型是否可以通过在增加大小的样本上反复训练来提高更多数据的性能,并查看其自身是否稳定。有很多方法。另一种方法是集成,一个突出的方法是堆叠。
但是你不理解堆叠的概念。堆叠的全部意义可以用以下语句来表达:通过构建各种不同的来探索模型空间模范家庭,并最终从他们所有人中得到最好的。因此,堆叠从假设开始,因为我们不知道哪个是我们数据的理想模型,我们应该尝试许多不完美的模型。其中一些在某些空间区域表现良好,另一些在其他空间区域表现良好,但没有一个能够以高性能处理所有空间。关键是要有来自不同家庭的模型。有时相同的算法可以产生非常不同的模型,有时则不会。例如,两个具有非常不同内核的 SVM 可以产生完全不同的表面。有时,即使对于同一个内核,SVM 也可以针对非常不同的复杂性参数产生非常不同的结果。对于 RF,通常情况并非如此,但在 RF 上获得具有不同参数的不同表面并非不可能。
您所做的是通过添加新功能在单个基础学习器上应用堆叠。首先是一般来说它不起作用。第一个学习器的预测具有字符串结构,它来自区域的平均。因此,与来自第二个模型的附加变量相比,此预测更强大。这意味着在第一个 RF 中学到的每一个错误的东西在第二个 RF 上变得非常强大,因为它使用相同的区域平均程序进行学习。因此,第一个学习器的错误会在第二个学习器中放大。我不知道附加功能,但在这种情况下,看起来很容易过拟合。
回到数据集中的内容:这个数据集有你必须学习的结构化内容和围绕它的非结构化内容(噪音)。你学习的目的是只学习结构。第一个 RF 能够简单地将结构与噪声区分开来,因为噪声没有改变。第二个 RF 不再能够做出这种区分,因为第一个 RF 的预测在区域中已经是平滑的,这意味着它具有强大的结构,至少从第二个 RF 的角度来看,它以相同的方式学习大大地。
最后一个想法是,看起来你所做的与提升程序有些相似。第一个学习者为您提供了一个结构,第二个学习者将其用作基线。但是与boosting相比有很大的不同。在提升过程中,您有一个要改进的基线,您可以通过再次查看原始特征来改进该基线,这些特征具有非结构化的噪声。在您的情况下,在第二次迭代中,您再也没有机会了,一切都是结构化的。因此错误放大了。
我的 2 美分:尝试多个学习器,最终在这些学习器中使用附加功能,为基础学习器尝试不同的模型,从非常简单(低复杂性或小自由度)的堆叠学习器开始,例如惩罚逻辑回归,以及更进一步更复杂的控制方式。