我可以在整个数据集上使用 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 应用于训练集,以防止测试集的分布泄漏到模型中。如果你在拆分之前在完整数据集上拟合缩放器,测试集信息用于转换训练集并用它来训练模型。
我正在为大约 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 应用于训练集,以防止测试集的分布泄漏到模型中。如果你在拆分之前在完整数据集上拟合缩放器,测试集信息用于转换训练集并用它来训练模型。