在训练和验证数据上表现良好,但在测试数据上表现很差

机器算法验证 回归 交叉验证 模型选择 r平方 过拟合
2022-03-28 23:20:34

我有 5-6k 个变量的回归问题。我将我的数据分成 3 个不重叠的集合:训练、验证和测试。我只使用训练集进行训练,并通过为每个模型选择一组不同的 200 个变量来生成许多不同的线性回归模型(我尝试了大约 100k 个这样的子集)。我将模型评分为分钟(R训练数据2,R验证数据2). 使用这个标准,我最终选择了一个模型。事实证明,选择的模型非常相似R2关于训练和验证数据。但是,当我在测试数据上尝试这个模型时,它的值要低得多R2. 因此,我似乎在某种程度上过度拟合了训练和验证数据。关于如何获得更强大的模型的任何想法?

我尝试增加训练数据的大小,但这并没有帮助。我正在考虑缩小每个子集的大小。

我尝试过使用正则化。但是,我使用套索或弹性网获得的模型要低得多R2在训练集和验证集上,与我通过子集选择方法获得的模型相比。因此,我不考虑这些模型,因为我假设如果模型 A 在训练集和验证集上的表现都比模型 B 好,那么模型 A 显然比模型 B 好。我会很好奇如果你不同意这一点。

在相关的说明中,您认为R2选择我的模型是一个不好的标准吗?

2个回答

虽然这听起来有点像过拟合,但我认为实际上更有可能是您的代码或流程中存在某种“错误”。我将首先验证您的测试集与训练/验证集是否存在某种系统性差异。假设您的数据按日期(或其他)排序。如果您将前 50% 用于训练,接下来的 25% 用于验证,其余用于测试,您可能意外地对数据进行了分层,使训练数据在某种程度上代表了验证数据,但对于测试数据。这很容易意外地做到。

您还应该确保您不会以某种方式“双重浸入”验证数据,这有时会意外发生。

或者,CV 自己的@Frank Harrell 报告说,单个训练/测试拆分通常过于可变,无法提供有关系统性能的有用信息(也许他可以通过引用或一些数据进行权衡)。您可能会考虑进行交叉验证或引导,这可以让您测量准确性测量的均值和方差。

与 Mikera 不同,我认为问题不在于你的评分机制。也就是说,我无法想象你的情况Rr一个一世n一世nG2<Rv一个l一世d一个一世n2,所以我建议单独使用验证数据进行评分。

更一般地说,我认为R2或者类似的东西是衡量连续输出模型性能的合理选择,假设您知道它的潜在警告。根据您正在做什么,您可能还想查看最大或最坏情况的错误。如果您以某种方式离散化您的输出(逻辑回归、一些外部阈值),那么查看精度/召回/AUC 可能是一个更好的主意。

您过度拟合是因为您使用min(training r-square,validation r-square)数据来产生分数,而分数又被用来驱动模型选择。因为您的训练 r-square 可能等于或低于(毕竟您只是对其进行了回归),这大致相当于在训练数据的 r-square 上进行模型选择。

这会导致与训练数据的拟合过于紧密,而忽略了验证数据。

如果你刚刚使用,validation r-square你应该得到更好的结果。