1. 程式人生 > >Python:sklearn資料預處理中fit(),transform()與fit_transform()的區別

Python:sklearn資料預處理中fit(),transform()與fit_transform()的區別

1 概述

注意這是資料預處理中的方法:

  • Fit(): Method calculates the parameters μ and σ and saves them as internal objects.

解釋:簡單來說,就是求得訓練集X的均值啊,方差啊,最大值啊,最小值啊這些訓練集X固有的屬性。可以理解為一個訓練過程

  • Transform(): Method using these calculated parameters apply the transformation to a particular dataset.

解釋:在Fit的基礎上,進行標準化,降維,歸一化等操作(看具體用的是哪個工具,如PCA,StandardScaler等)。

  • Fit_transform(): joins the fit() and transform() method for transformation of dataset.

解釋:fit_transform是fit和transform的組合,既包括了訓練又包含了轉換。

transform()和fit_transform()二者的功能都是對資料進行某種統一處理(比如標準化~N(0,1),將資料縮放(對映)到某個固定區間,歸一化,正則化等)

fit_transform(trainData)對部分資料先擬合fit,找到該part的整體指標,如均值、方差、最大值最小值等等(根據具體轉換的目的),然後對該trainData進行轉換transform,從而實現資料的標準化、歸一化等等。

根據對之前部分trainData進行fit的整體指標,對剩餘的資料(testData)使用同樣的均值、方差、最大最小值等指標進行轉換transform(testData),從而保證train、test處理方式相同。所以,一般都是這麼用:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)

Note:

  • 必須先用fit_transform(trainData),之後再transform(testData)
  • 如果直接transform(testData),程式會報錯
  • 如果fit_transfrom(trainData)後,使用fit_transform(testData)而不transform(testData),雖然也能歸一化,但是兩個結果不是在同一個“標準”下的,具有明顯差異。(一定要避免這種情況)

2 舉例

以PCA預處理,舉個栗子:

import pandas as pd
import numpy as np

from sklearn.decomposition import PCA 

#==========================================================================================
X1=pd.DataFrame(np.arange(9).reshape((3,3)),index=['a','b','c'],
              columns=['one','two','three'])  

pca=PCA(n_components=1)

newData1=pca.fit_transform(X1)

pca.fit(X1)
newData12=pca.transform(X1)

"""
newData1和newData2結果一致
"""
#==========================================================================================
a=[[1,2,3],[5,6,7],[4,5,8]]

X2=pd.DataFrame(np.array(a),index=['a','b','c'],
              columns=['one','two','three'])  
pca_new=PCA(n_components=1)
pca_new.transform(X2)
"""
沒有fit,直接transform報錯:
NotFittedError: This PCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
"""

3 參考文獻