1. 程式人生 > 其它 >Sxklearn.preprocessing之StandardScaler 的transform()函式和fit_transform()函式清晰講解及其案例應用--已解決

Sxklearn.preprocessing之StandardScaler 的transform()函式和fit_transform()函式清晰講解及其案例應用--已解決

技術標籤:Pytorch神經網路

  樓主之前因為transform()函式和fit_transform()函式兩個函式的功能和實現傻傻分不清楚,現在總結一下,主要是看了一位大神的講解:
新增連結描述

1.兩函式功能

首先我們要明確: fit(x,y)傳兩個引數的是有監督學習的演算法;fit(x)傳一個引數的是無監督學習的演算法,比如降維、特徵提取、標準化。

函式實現的功能:

對資料進行標準化處理

使用公式如下:

  其中μ是均值, σ是標準差。目的是使資料服從均值為零,標準差為1的標準正態分佈。   一般標準化都是給訓練集資料做的,但在以下情況中也必須做資料標準化:交叉驗證時的測試集,或預測前獲得了一組新的樣本等。而在對新的資料或測試集進行標準化時,我們所用的是訓練集標準化中的均值μ和標準差σ。因此經常有程式碼這樣寫:
from sklearn.preprocessing import StandardScaler
ss= StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

即fit_transform()用在訓練集上先計算了訓練集資料的均值μ和標準差σ,並以此均值μ和標準差σ對訓練集進行標準化。

fit_transform是fit和transform的組合。fit_transform中包含兩個過程:計算均值/標準差,資料轉換,是資料處理的兩個環節。每一個transform都需要先fit,把資料轉為(μ, σ)分佈。fit是為了程式的後續函式transform的呼叫而服務的,是個前提條件。

2.兩者之間的聯絡

fit_transform和transform的區別就是前者是先計算均值和標準差再轉換,而直接transform則是用之前資料計算的引數進行轉換。換句話說,如果最先前沒有fit,即沒有快取(μ, σ),那麼,是不可以直接執行transform。很明顯,fit_transform與transform執行結果會一致,如果先前快取一致,那麼,transform函式是一定可以替換為fit_transform函式,反之,則不可以。

簡單記錄一下,希望可以幫到你。