看了一堆搜索排名靠前的中文博客,感覺沒有一個解釋能讓人醍醐灌頂的,故搜索英文網頁並記之。
謝絕轉載。
首先對於數據標准化一般是這么做的:
其中μ是均值, σ是標准差。目的是使數據服從均值為零,標准差為1的標准正態分布,此即標准化(Standardization)。
標准化都是給訓練集數據做的,但在以下情況中也必須做數據標准化,比如,交叉驗證時的測試集,或者是預測前獲得了一組新的樣本。而在對新的數據或測試集進行標准化時,我們所用的是訓練集標准化中的均值μ和標准差σ。
因此,StandardScaler 中的fit()所做的就是計算數據的均值μ和標准差σ,並將他們儲存為一個內部對象的狀態,無返回值。然后,對測試集調用transform()方法,此方法將使用剛剛fit()計算得到的均值μ和標准差σ來對測試集數據進行標准化。
而fit_transform()就是將以上兩步二合一,因為其內部就是先后調用fit()和transform()函數的。
所以我們經常能看到類似這樣的代碼:
1 # Feature Scaling 2 from sklearn.preprocessing import StandardScaler 3 sc = StandardScaler() 4 X_train = sc.fit_transform(X_train) 5 X_test = sc.transform(X_test)
注意這里fit_transform()是用在訓練集上的,也就是說,fit_transform()先計算了訓練集數據的均值μ和標准差σ,並以此對訓練集進行標准化。
參考:
https://datascience.stackexchange.com/questions/12321/whats-the-difference-between-fit-and-fit-transform-in-scikit-learn-models
https://www.kaggle.com/questions-and-answers/58368