2017-10-14 115 views
2

有趣的是,我在计算器和其他网站上看到了很多不同的答案:我可以使用Train和测试数据进行插补吗?

在处理我的训练数据集时,我使用决策树模型来推算某列的缺失值。所以这是我的问题。使用所有可用数据(训练&测试)来制作插补模型(而不是预测)还是公平的?或者在做这些工作时只能触摸训练集?另外,一旦我开始在我的测试集上工作,我是否必须只使用测试集数据,使用我的训练集中制作的相同插补模型进行插值,还是可以使用所有可用数据重新训练我的插补模型?

只要我没有触及我的测试集进行预测模型训练,我会认为使用其他数据来处理像插值问题一样好。但也许这将打破基本规则。思考?

回答

0

我会this answer on cross-validated同意:

训练和测试集的划分是复制 ,你有过去的信息,并建立模型 将测试其未来的AS-局势的企图但未知的信息

预处理数据的方式可能会影响模型性能,在某些情况下会显着影响模型性能。测试数据是您不知道的样本的代理。如果你知道所有未来的数据,你会以不同的方式进行插补吗如果是,那么使用测试数据就是作弊。如果否,那么无论如何都不需要测试数据。因此,最好不要触摸测试数据,直到建立模型。

0

在训练集上进行任何处理时,请勿使用测试集中的任何信息。 @Maxim和与之相关的答案是正确的,但我想扩大答案。

插补尝试从不完整的数据中推断缺失条目的可能值。我认为将缺失值视为测量错误的一种形式很有帮助(有关这方面的有用演示,请参见this article)。因此,有理由相信缺失与基础数据生成过程有关。而这个过程正是你试图用你的模型复制(当然,不完美)。

如果你想让你的模型得到很好的概括 - 不要大家都好! - 那么最好确保你对训练集所做的任何处理都只取决于该组中包含的数据中的信息。

我甚至会建议你考虑三路分割:测试,训练和验证集。验证集进一步从训练集中挑选出来,用于测试适合“本身”的模型(在超参数的调整中)。这部分是交叉验证程序在诸如sklearn和其他管线之类的事情中所做的。在这种情况下,我通常在之后执行插补而不是完整的训练集,因为我试图评估模型“知道”的数据模型(并且保留数据是未知数的代理/未来数据)。但请注意,我并没有看到这一点,因为在测试和训练集之间保持一个完整的墙。

相关问题