一些文章提到,如果只有训练集和测试集,首先需要使用fit_transform()来缩放训练集,然后仅对测试集使用transform(),以防止数据泄露。
在我的情况下,我还有验证集。
我认为下面提供的代码之一可以使用,但我不能完全依赖它们。任何帮助都将不胜感激,谢谢!
1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size = 2/7)scaler = StandardScaler()X_train = scaler.fit_transform(X_train)X_val = scaler.transform(X_val)X_test = scaler.transform(X_test)
2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)scaler = StandardScaler()X_train = scaler.fit_transform(X_train)X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size = 2/7)X_test = scaler.transform(X_test)
回答:
一般来说,您应该使用选项1的代码。使用fit和transform处理训练数据的原因是:a) fit将计算训练集的均值、方差等,然后尝试将模型拟合到数据上;b) 之后transform将根据拟合的模型转换数据。
如果对测试集再次使用fit,将会给模型引入偏差。