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,方差爲1spa

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

fit_transform是fit和transform的組合。orm

咱們知道fit(x,y)在新手入門的例子中比較多,可是這裏的fit_transform(x)的括號中只有一個參數,這是爲何呢?ci

fit(x,y)傳兩個參數的是有監督學習的算法,fit(x)傳一個參數的是無監督學習的算法,好比降維、特徵提取、標準化文檔

而後解釋爲何出來fit_transform()這個東西,下面是重點:get

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。

相關文章
相關標籤/搜索