为什么要拆分训练数据以计算一半数据的值,然后填充另一半的 Nan 值?

数据挖掘 机器学习 数据清理
2021-10-15 20:22:11

我正在检查 Bosch kaggle 竞赛中用 python 编写的内核(kaggle 链接到 python 内核),我遇到了一种奇怪的(至少对我而言)填充 Nan 值的方法。

将训练数据分成两半,然后通过使用字段的非 Nan 值和目标值在一半中计算某种平均值,然后用这些计算值填充另一半的 Nan 值。

然后,在填充 Nan 值后训练模型时,仅对已替换 Nan 值的一半数据训练模型。

问题是,你为什么要把数据分成两半来计算,然后填充另一半?当平均值与目标值相关时,您是否会引入某种泄漏,这就是为什么只使用填充值的一半(您没有计算任何东西,只是填充的 Nans)来训练的原因?如果您对所有火车数据执行此操作,此过程是否容易过度拟合?

先谢谢了。

2个回答

你基本上回答了你自己的问题:

当平均值与目标值相关时,您是否会引入某种泄漏,这就是为什么只使用填充值的一半(您没有计算任何东西,只是填充的 Nans)来训练的原因?如果您对所有火车数据执行此操作,此过程是否容易过度拟合?

是的。您已经使用了目标值和训练集的前半部分。换句话说,填充的 NaN 值包含有关其中目标值的信息,因此如果您要对性能估计执行任何交叉验证,您最终会高估您的性能指标。最好的做法是将使用过的部分排除在任何进一步的培训步骤之外,以避免信息泄露。

原因是您(显然)无法将 NaN 提供给您的模型,因此您绝对必须清理它们。看起来这里的想法是——通过用零以外的东西填充它们可能会通过引入一些过多的信息来帮助学习。

首先运行某种 seq2seq RNN 来尝试从非 NaN 预测 NaN,然后​​探索它如何影响学习率/准确度,这实际上会很有趣……