尽管我一直在研究回归问题,但我更熟悉分类任务。我得到了一个大型训练数据集(>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% 用于测试(如所述)(左:验证,右:测试):

以下是使用与上图相同的训练/测试的随机森林的结果(左:验证,右:测试):

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