[英]How to apply standardization to train and test datasets
比方說,我有一個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
數據集? 我有點困惑
應該將StandardScaler
僅用於特征矩陣X。
因此,所有fit
, transform
和inverse_transform
方法inverse_transform
需要X。
請注意,在擬合模型之后,您可以訪問以下屬性:
mean_
: mean_
中每個特征的X_train
scale_
:在每個功能的標准差X_train
transform
方法對每個樣本i
進行(X[i, col] - mean_[col] / scale_[col])
。 而每個樣本i
的inverse_transform
方法(X[i, col] * scale_[col] + mean_[col])
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.