假设我有一个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 preprocessing
scaler = 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_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
我还有另一个问题。由于我有目标值,因此我应该使用
scaler = preprocessing.StandardScaler()
X_train_std = scaler.fit_transform(X_train, y_train)
X_test_std = scaler.transform(X_test)
代替第一个代码块?
我是否还必须将转换应用于y_train
和y_test
数据集?我有点困惑
答案 0 :(得分:4)
StandardScaler
仅应用于特征矩阵X。
因此,所有fit
,transform
和inverse_transform
方法只需要您的X。
请注意,在拟合模型之后,您可以访问以下属性:
mean_
:X_train
中的每个功能的平均值scale_
:X_train
中每个特征的标准偏差 transform
方法对每个样本(X[i, col] - mean_[col] / scale_[col])
执行i
。而每个样本inverse_transform
的{{1}}方法(X[i, col] * scale_[col] + mean_[col])
。