2017-07-19 51 views
1

我不是來自統計學,但是通過做一個工作與機器學習和NN我看到縮放數據可以產生很多傷害。從我所瞭解的情況來看,在列車測試之前縮放數據並不是一個好的選擇,但請看看這個例子,當在列車測試分離之後完成縮放時。sklearn Standardscaler()可以影響測試矩陣的結果

import numpy as np 
from sklearn.preprocessing import StandardScaler 


train_matrix = np.array([[1,2,3,4,5]]).T 

test_matrix = np.array([[1]]).T 


e =StandardScaler() 
train_matrix = e.fit_transform(train_matrix) 
test_matrix = e.fit_transform(test_matrix) 

print(train_matrix) 

print(test_matrix) 

[out]: 

[[-1.41421356] #train data 
[-0.70710678] 
[ 0.  ] 
[ 0.70710678] 
[ 1.41421356]] 


[[ 0.]] #test data 

StandardScaler類會做每個數據集的兩個不同的縮放處理,並且可能會損害您NN結果的錯誤是:

列車矩陣1 -1.41421356,而在測試矩陣1 0現在想象你用訓練權重的測試數據做一個預測模型。對於1,您會收到完全不同的結果。如何克服這一點?

回答

2

您不應該單獨轉換火車和測試。相反,您應該在訓練數據上安裝縮放器(然後使用縮放器對其進行轉換),然後使用合適的縮放器轉換測試數據。因此,在你的代碼,你應該做的:

e =StandardScaler() 
train_matrix = e.fit_transform(train_matrix) 
test_matrix = e.transform(test_matrix) 

然後當你打印你得到預期的結果轉化的訓練和測試數據:

[[-1.41421356] 
[-0.70710678] 
[ 0.  ] 
[ 0.70710678] 
[ 1.41421356]] 


[[-1.41421356]] 
+0

感謝儀。你已經第二次幫助我了。祝一切順利! – Makaroniiii