从验证准确度显着下降到测试准确度

数据挖掘 神经网络 回归 随机森林 交叉验证 过拟合
2022-01-28 20:49:38

尽管我一直在研究回归问题,但我更熟悉分类任务。我得到了一个大型训练数据集(>70k 个样本)和一个独立收集的测试集(~2k)。我始终获得不错的验证准确度,但在测试集上的准确度显着降低。

我一直在执行这样的验证:
1)标准化训练数据;存储均值和方差(在 sklearn Scaler 对象中)。
2) 保留 10% 的训练数据进行验证。
3) 对剩余的 90% 训练数据进行 3 折交叉验证。看看错误。
4) 在 90% 的训练数据上训练模型(该子集的 10% 用作训练期间的验证)。
5) 评估 10% 保留训练数据的性能。这被用作我的最终验证措施。

然后我通过以下方式测试我的模型:
1)使用训练数据的均值和方差对测试数据进行标准化。
2) 预测和评估

根据我测试的模型,从验证到测试,我通常会收到 10% 以上的准确度下降。现在,为了测试这是否是由来自不同分布的测试集引起的,我将测试集(~2k)与训练集的大小相等的随机部分组合在一起。然后我将其中的 10% 作为新的测试集,并使用其余的进行上述训练/验证。所以在这种情况下,测试集不再是一个独立收集的数据集。

看来我在某种程度上过度拟合了验证集,尽管如上所述,验证部分一直持续到训练之后。

我认为值得注意的是,我的目标变量和许多预测变量呈指数分布(目标变量的下限为 0 并且越来越少的大值)。异方差性很明显,因为绘制预测输出与观察输出的图显示误差随着值的增大而增加。

以下是使用 MLP 回归器与原始训练数据和测试数据的结果(左:验证,右:测试): 在此处输入图像描述

以下是使用 MLP 和同等组合的训练/测试(~4k)作为训练的结果,其中 10% 用于测试(如所述)(左:验证,右:测试): 在此处输入图像描述

以下是使用与上图相同的训练/测试的随机森林的结果(左:验证,右:测试): 在此处输入图像描述

对于造成这种差异的原因,我将不胜感激。谢谢!

1个回答

我不认为这很常见,我经常遇到回归问题。一般来说,我认为这意味着模型未指定,因此它不是学习 X 和 y 之间的实际关系,而是过度拟合。一般来说,我发现我必须做一些特征工程,并确保我只使用真正需要的特征 - 太多的特征或与目标有虚假关系的特征会真正伤害 RF 模型,尤其是在我的经验中。还要确保作为交叉验证的一部分,您正在交叉验证直接影响模型复杂性的参数,即树深度、树数等。