假设我有一个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])
。