我有一个关于机器学习数据预处理的问题。具体来说,是关于如何转换数据,使其具有零均值和单位方差。我已经将数据分成了两个数据集(我知道应该有三个,但为了简化起见,我们假设只有两个)。我应该转换我的训练数据集,使整个训练数据集具有单位方差和零均值,然后在测试模型时转换每个测试输入向量,使每个特定的测试输入向量也具有单位方差和零均值,还是应该将整个数据集(训练和测试)一起转换,使整个数据集具有单位方差和零均值?我认为应该采用前者,这样就不会在测试数据集中引入过多的偏差。但我不是专家,所以才有此疑问。
回答:
应该只在训练集上拟合你的预处理器,然后将均值和方差转换器应用于测试集。在训练和测试集上计算这些统计数据会泄露一些关于测试集的信息。
让我给你链接一个关于深度学习的优秀课程,并展示一个引用(两者都来自@[隐藏人名]):
常见陷阱。关于预处理的一个重要点是,任何预处理统计数据(例如数据均值)都必须仅在训练数据上计算,然后应用于验证/测试数据。例如,在整个数据集上计算均值并从每张图像中减去,然后再将数据分成训练/验证/测试集是错误的。相反,均值必须仅在训练数据上计算,然后从所有分集(训练/验证/测试)中等量减去。