我可以在整个数据集上使用 StandardScaler() 还是应该分别计算训练集和测试集?

Can I use StandardScaler() on whole data set, or should I calculate on train and test sets separately?

我正在为大约 100 个连续特征和一个连续标签开发 SVR。

为了缩放数据,我写道:

#Read in
df = pd.read_csv(data_path,sep='\t')
features = df.iloc[:,1:-1] #100 features
target = df.iloc[:,-1] #The label
names = df.iloc[:,0] #Column names


#Scale features
scaler = StandardScaler()
scaled_df = scaler.fit_transform(features)


# rename columns (since now its an np array)
features.columns = df_columns

所以现在我有了一个缩放的数据框,我的下一步是分成训练和测试,然后开发一个模型(SVR):

X_train, X_test, y_train, y_test = train_test_split(scaled_df, target, test_size=0.2)
model = SVR()

...然后我将模型与数据相匹配。

但我注意到其他人不适合整个数据帧的 StandardScaler(),但他们将数据帧拆分为训练和测试,然后分别对每个应用 StandardScaler()。

将 StandardScaler 应用于整个数据框,还是分别训练和测试,有区别吗?

您需要将 StandardScaler 应用于训练集,以防止测试集的分布泄漏到模型中。如果你在拆分之前在完整数据集上拟合缩放器,测试集信息用于转换训练集并用它来训练模型。