为了阻止步骤(2)中从验证集到训练集的数据泄漏,
- 我们应该首先将数据拆分为训练集和验证集,然后
- 仅使用训练集计算均值和标准差,最后
- 使用这个均值和标准差来规范化训练集和验证集。
这样一来,验证集就不会泄露任何信息到训练集,尽管验证集几乎是标准化的。这种偏差表示验证集和训练集分布之间的信息差异,后来 [正确地] 导致验证错误大于训练错误。
我们可能会考虑分别对集合进行归一化,但是这样我们可能会失去验证集和训练集分布之间的潜在差异。
例如,在价格的一维时间序列中,如果训练集中的平均价格为1.0$,我们期望一个平均的验证集2.0$导致根据周围价格训练的模型出现问题1.0$. 但是,通过将验证集分别标准化为1.0$,我们错误地将验证集带到了训练模型已经期望的范围,这导致了验证错误的低估。
编辑
在训练数据本身——不是每个例子都会受到未来的影响吗?——阿隆·古德曼
正确的。如果训练集是[Pt1,...,PtN],那么对于n∈[1,N)归一化点P^tn会偏向点(包含点的信息)[Ptn+1,...,PtN],但这不是泄漏,因为整个训练集都是我们所知道的,因此我们可以用它做任何我们想做的事情。从另一个角度来看,这种看似欺骗性的转换会被证明是好的,因为(1)规范化的缺点将在验证错误(更多作弊,更多验证错误)中暴露出来,因此我们不会被误导,(2)规范化可以通过降低验证错误使我们受益(否则,我们不会标准化)