如何将标准化应用于训练和测试数据集

Fac*_*pai 3 python machine-learning scikit-learn

假设我有一个shape的10特征数据集和一个Xshape[100, 10]y目标数据集[100, 1]。例如,将两者分开后,sklearn.model_selection.train_test_split我得到:

  • X_train: [70, 10]
  • X_test: [30, 10]
  • y_train: [70, 1]
  • y_test: [30, 1]

应用标准化的正确方法是什么?

我试过:

from sklearn import preprocessing
scaler = preprocessing.StandardScaler()

scaler.fit(X_train)

X_train_std = scaler.transform(X_train)
X_test_std = scaler.transform(X_test)
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试使用模型进行预测,当我尝试反转缩放以查看 MAE 时,我会出错

from sklearn import linear_model
lr = linear_model.LinearRegression()
lr.fit(X_train_std, y_train)
y_pred_std = lr.predict(X_test_std)

y_pred = scaler.inverse_transform(y_pred_std) # error here
Run Code Online (Sandbox Code Playgroud)


我还有一个问题。由于我有目标值,我应该使用

scaler = preprocessing.StandardScaler()

X_train_std = scaler.fit_transform(X_train, y_train)
X_test_std = scaler.transform(X_test)
Run Code Online (Sandbox Code Playgroud)

而不是第一个代码块?


我是否也必须将转换应用于y_trainy_test数据集?我有点困惑

Jan*_*n K 5

StandardScaler 应该仅用于特征矩阵 X。

所以所有的fit,transforminverse_transform方法只需要你的X。

请注意,拟合模型后,您可以访问以下属性:

  1. mean_: 中每个特征的平均值 X_train
  2. scale_: 中每个特征的标准偏差 X_train

transform方法(X[i, col] - mean_[col] / scale_[col])适用于每个样本i。而每个样品的inverse_transform方法。(X[i, col] * scale_[col] + mean_[col])i