sklearn fit transform fit_transform


scikit-learn提供了一系列轉換庫,他們可以清洗,降維,提取特征等。

在數據轉換中有三個很重要的方法,fit,fit_transform,transform

ss=StandardScaler() X_train = ss.fit_transform(X_train) X_test = ss.transform(X_test)
  • 1
  • 2
  • 3

初學時候好奇為何,訓練樣本用fit_transform,而測試樣本用transform?

仔細閱讀官方文檔發現,fit方法是用於從一個訓練集中學習模型參數,其中就包括了歸一化時用到的均值,標准偏差。transform方法就是用於將模型用於位置數據,fit_transform就很高效的將模型訓練和轉化合並到一起,訓練樣本先做fit,得到mean,standard deviation,然后將這些參數用於transform(歸一化訓練數據),使得到的訓練數據是歸一化的,而測試數據只需要在原先得到的mean,std上來做歸一化就行了,所以用transform就行了。

StandardScaler對矩陣作歸一化處理,變換后的矩陣各特征均值為0,方差為1

網上抄來抄去都是一個意思,

fit_transform是fit和transform的組合。

我們知道fit(x,y)在新手入門的例子中比較多,但是這里的fit_transform(x)的括號中只有一個參數,這是為什么呢?

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

然后解釋為什么出來fit_transform()這個東西,下面是重點:

fit和transform沒有任何關系,之所以出來這么個函數名,僅僅是為了寫代碼方便,

所以會發現transform()和fit_transform()的運行結果是一樣的。

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

transform函數是一定可以替換為fit_transform函數的

fit_transform函數不能替換為transform函數!!!理由解釋如下:

sklearn里的封裝好的各種算法都要fit、然后調用各種API方法,transform只是其中一個API方法,所以當你調用除transform之外的方法,必須要先fit,為了通用的寫代碼,還是分開寫比較好

也就是說,這個fit相對於transform而言是沒有任何意義的,但是相對於整個代碼而言,fit是為后續的API函數服務的,所以fit_transform不能改寫為transform。

 


免責聲明!

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



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