比 LightGBM 的完整数据集好 80-20

数据挖掘 交叉验证
2022-02-20 00:05:44

最近,我一直在使用 LightGBM 作为回归器,以便在一个包含 2 万个观测值和 40 个变量的数据集上进行预测。

我有两种模式,1)生产和2)测试。第一个只是用整个数据集训练一个模型。第二个对 80% 的数据集执行相同的操作,并对剩余的 20% 进行测试(使用 train_test_split 完成 80-20,来自 sklearn.model_selection,未使用种子)。

在这两种情况下,我都会在执行结束时显示neg_mean_squared_error 。在整个数据集的第一种情况下,在第二种情况下,我得到两个值(训练和测试)

我很震惊地看到,虽然在第一种情况下我的错误大约是 -10,但在第二种情况下,值是 -5(训练)和 -5.3(测试)。我的目标变量的平均值可以是 80。我预计会失去准确性,因为我用较少的数据进行训练,然后我在不同的样本上进行测试。

问题:有任何理论上的原因可以解释 80-20 测试比完整数据情况下获得“更好”的 neg_mean_squared_error 吗?或者它必须是我的代码中的(偷偷摸摸的)错误?

1个回答

我想不出任何理论上的理由。然而:

  • 可能是 neg_mean_squared_error 没有正确实现。尝试其他指标,例如中值或平均百分比误差,看看这种情况是否会继续发生。
  • 它可能与数据的分布方式有关,但这并不常见。

最后,我不会在没有在测试集中测试其性能的情况下将模型投入生产(例如,如果您的意思是部署到产品中),即使在使用交叉验证训练的模型的另一个实例中具有良好的表现。一个原因:可能是一小部分训练数据破坏了您的模型,并且没有泛化。