fit_transform和transform的區別


來自:泡泡糖nana

來自:俞馳

1. fit_transform是fit和transform的組合。

2. fit(x,y)傳兩個參數的是有監督學習的算法,fit(x)傳一個參數的是無監督學習的算法,比如降維、特征提取、標准化。

3. fit和transform沒有任何關系,之所以出來這么個函數名,僅僅是為了寫代碼方便,所以會發現transform()和fit_transform()的運行結果是一樣的。

注意:運行結果一模一樣不代表這兩個函數可以互相替換,絕對不可以!transform函數是一定可以替換為fit_transform函數的,fit_transform函數不能替換為transform函數!

4.

    # 從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,即我們已經找到了轉換規則,我們把這個規則利用在訓練集上,同樣,我們可以直接將其運用到測試集上(甚至交叉驗證集),所以在測試集上的處理,我們只需要標准化數據而不需要再次擬合數據。用一幅圖展示如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM