假设我有一个10特征的数据集X,形状为[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 preprocessingscaler = preprocessing.StandardScaler()scaler.fit(X_train)X_train_std = scaler.transform(X_train)X_test_std = scaler.transform(X_test)
但是,当我尝试使用模型进行预测,并尝试逆转缩放以查看MAE时,我遇到了错误
from sklearn import linear_modellr = 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) # 错误发生在这里
我还有另一个问题。既然我有目标值,我是否应该使用
scaler = preprocessing.StandardScaler()X_train_std = scaler.fit_transform(X_train, y_train)X_test_std = scaler.transform(X_test)
而不是第一个代码块?
我是否也需要对y_train和y_test数据集应用转换?我有点困惑
回答:
StandardScaler应该只用于特征矩阵X。
因此,所有的fit、transform和inverse_transform方法只需要你的X。
请注意,在你拟合模型后,你可以访问以下属性:
mean_:X_train中每个特征的均值scale_:X_train中每个特征的标准差
transform方法对每个样本i执行(X[i, col] - mean_[col] / scale_[col])。而inverse_transform方法对每个样本i执行(X[i, col] * scale_[col] + mean_[col])。