敲《Python機器學習及實踐》上的code的時候,對於數據預處理中涉及到的fit_transform()函數和transform()函數之間的區別很模糊,查閱了很多資料,這里整理一下:
# 從sklearn.preprocessing導入StandardScaler from sklearn.preprocessing import StandardScaler # 標准化數據,保證每個維度的特征數據方差為1,均值為0,使得預測結果不會被某些維度過大的特征值而主導 ss = StandardScaler() # fit_transform()先擬合數據,再標准化 X_train = ss.fit_transform(X_train) # transform()數據標准化 X_test = ss.transform(X_test)
涉及到這兩個函數的代碼如下:
我們先來看一下這兩個函數的API以及參數含義:
1、fit_transform()函數
即fit_transform()的作用就是先擬合數據,然后轉化它將其轉化為標准形式
2、transform()函數
即tranform()的作用是通過找中心和縮放等實現標准化
到了這里,我們似乎知道了兩者的一些差別,就像名字上的不同,前者多了一個fit數據的步驟,那為什么在標准化數據的時候不使用fit_transform()函數呢?
原因如下:
為了數據標准化(使特征數據方差為1,均值為0),我們需要計算特征數據的均值μ和方差σ^2,再使用下面的公式進行歸一化:
我們在訓練集上調用fit_transform(),其實找到了均值μ和方差σ^2,即我們已經找到了轉換規則(即方差和均值),我們把這個規則利用在訓練集上,同樣,我們可以直接將其運用到測試集上(甚至交叉驗證集),所以在測試集上的處理,我們只需要標准化數據而不需要再次擬合數據。用一幅圖展示如下:
作者:nana-li
來源:CSDN
原文:https://blog.csdn.net/quiet_girl/article/details/72517053
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!