test data 的歸一化是否要沿用 train data 歸一化時用到的參數?
想請問: 舉例來說,我有 train data 和 test data train_data = [2, 7, 10, 4] test_data = [5, 3, 11] 好比說我們對 train data 做 Min-max 處理: min = 2 max = 10 mm_train_data = [0, 0.625, 1, 0.25] 那這個時候 test data 的 Min-max 應該要是 min = 2 max = 10 mm_test_data = [0.375, 0.125, 1.125] 還是 min = 3 max = 11 mm_test_data = [0.25, 0, 1] 會比較好呢? 考慮到 test data 的資料分佈不一定跟 train data 類似,應該要套用 train data 的最大最小值來處理比較好,可是這樣就有可能會出現小於0或大於1的值,失去了 min-max 將數值收束在 0 到 1 之間的目的。 請問哪個作法比較好呢?還是可以視情況選擇作法呢?還請各位解惑、指教,謝謝。
回答列表
-
2021/07/20 上午 03:19William贊同數:1不贊同數:0留言數:2
測試集的正規化要依照訓練集為基準哦! 比如在訓練集使用minmax正規化,特徵A min=2 max=10。 在測試集某一筆資料特徵A若為12,則要正規化成(12-2)/(10-8)=1.25哦(在測試集有機會出現超出minmax區間的值)。 另外,要避免正規化後才切分資料,否則會產生偏差。
-
2021/07/21 下午 07:53Yilin贊同數:0不贊同數:0留言數:0
可以直接使用 sklearn 套件完成以上內容哦,假設X是我的訓練資料。建立一個 MinMaxScaler 先進行 fit() 找出訓練集的 min max 參數。接著透過 transform() 可以按照 X 的分佈直接進行資料的縮放。詳細內容可以[參考](https://ithelp.ithome.com.tw/articles/10240494)。 ``` from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)).fit(X) X_test_scaled = scaler.transform(X_test) ```