在 LSTM 中,归一化应该在训练和测试集拆分之前还是之后进行?

In a LSTM should normalization be done before or after the split in train and test set?

通常,当使用 NN 时,我以这种形式进行归一化:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

也就是说,我在拆分之后进行归一化,这样就不会出现从测试集到训练集的泄漏。 但是我在使用 LSTM 时对此表示怀疑。

假设我在 LSTM 中训练集的最后一个序列是 X = [x6, x7, x8], Y = [x9].

那么,我在测试集中的第一个序列应该是X = [x7, x8, x9], Y = [x10]。

那么,如果我最终在测试集的 X 中混合了两组的值,那么在拆分后对数据进行归一化是否有意义? 或者我应该在

之前对整个数据集进行归一化
scaler = StandardScaler()
data = scaler.fit_transform( data )

然后拆分?

您展示的规范化程序是解决每个机器学习问题的唯一正确方法,LSTM 也不例外。

当涉及到类似的困境时,有一个一般的经验法则可以用来澄清困惑:

During the whole model building process (including all necessary preprocessing), pretend that you have no access at all to any test set before it comes to using this test set to assess your model performance.

换句话说,假设您的测试集只在 之后 部署了您的模型,并且它开始接收在此之前从未见过的全新数据。

因此从概念上讲,将您的第一个代码片段的第三行移至末尾可能会有所帮助,即:

X_train, X_test, y_train, y_test = train_test_split(X, y)
### FORGET X_test from this point on...

X_train = scaler.fit_transform(X_train)

# further preprocessing, feature selection etc...

# model building & fitting...

model.fit(X_train, y_train)

# X_test just comes in:

X_test = scaler.transform(X_test)
model.predict(X_test)