Python:sklearn資料預處理中fit(),transform()與fit_transform()的區別
阿新 • • 發佈:2019-01-26
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.
"""