Data-Transformation

預處理訓練集和測試集分割前後的區別

  • March 12, 2017

**sklearn**在將數據拆分為之前和之後對數據集進行預處理有區別train_test_split嗎?

換句話說,這兩種方法是否等效?

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

#standardizing after splitting
X_train, X_test, y_train, y_test = train_test_split(data, target)
sc = StandardScaler().fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

#standardizing before splitting
data_std = StandardScaler().fit_transform(data)
X_train, X_test, y_train, y_test = train_test_split(data_std, target)

不,兩種方法都不等效。

StandardScaler()通過去除均值和縮放到單位方差來標準化特徵

如果您在拆分後擬合縮放器:假設,如果測試集中(拆分後)有任何異常值,則縮放器不會考慮計算均值和方差的那些。

如果您在整個數據集上擬合縮放器然後拆分,縮放器將在計算均值和方差時考慮所有值。

由於在這兩種情況下均值和方差不同,因此擬合和變換函數的執行方式會有所不同。

引用自:https://stats.stackexchange.com/questions/267012

comments powered by Disqus