簡體   English   中英

當我們使用transform得到相同的output時為什么要使用fit_transform方法

[英]Why should we use the fit_transform method when we get the same output using transform

我不明白為什么必須使用fit_transform方法,當transform方法可以給出與僅使用擬合變換方法相同的 output 時, fit方法的整體點是什么?

我已經打印了x_trainx_test ,它們都給出了類似的 output。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train[:, 3:] = sc.fit_transform(x_train[:, 3:])
x_test[:, 3:] = sc.transform(x_test[:, 3:])

如果在 sc.transform() 之前不調用 sc.fit_transform() 會發生什么? 后者將失敗並顯示以下消息:

NotFittedError: This StandardScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

function fit_transform() 做了 fit() 后跟 transform() 會做的事情。

如果您對訓練集的轉換值不感興趣,則可以單獨使用 fit()。

因此,在 sickit 學習預處理器中,您通常總是有一個fit 、一個transform和一個 'fit_transform' 方法。

區別如下:

fit learns數據的結構以找出其中存在的類別和其他預處理信息。 安裝好預處理器后,您可以使用該安裝好的預處理器使用該fitting信息transform數據。 我們舉一個簡單的例子:

import numpy as np 
from sklearn.preprocessing import StandardScaler

X_train = np.array([[1, 2], [3, 4], [5, 6]])
X_test = np.array([[7, 8], [9, 10]])

X_train:
array([[1, 2],
       [3, 4],
       [5, 6]])

X_test:
array([[ 7,  8],
       [ 9, 10]])

在這里,您正在准備標准縮放器 object

sc = StandardScaler()

這個 object 必須有一些參數保存數據的平均值等信息但是由於它還沒有看到任何數據,所以這個平均值還不存在,所以下面的代碼將顯示錯誤

print(sc.mean_)

AttributeError: 'StandardScaler' object has no attribute 'mean_'

現在讓我們用它來擬合 X_train 數據

sc.fit(X_train)

讓我們看看這個操作之后發生了什么

print(sc.mean_)

[3. 4.]

現在我們可以看到我們的標准縮放器 object 已經計算了他所看到的數據的平均值並將其存儲在它的屬性之一中,這里是mean_

所以這基本上是fit方法的作用:它是找到一些數據的參數,在我們的例子中是訓練數據。 為什么我們要首先找到這些參數是因為我們可能希望完全重用它們來轉換其他數據。 這就是transform方法的用武之地。

transform 方法使用一些先前數據的'learned'參數來轉換一些新數據。 所以在我們的例子中,我們現在可以轉換我們的測試數據。 這是因為訓練測試數據應該以相同的方式進行轉換(使用相同的參數,如均值等)

sc.transform(X_test)

array([[2.44949 , 2.44949 ],
       [3.674235, 3.674235]])

但是當然我們也應該首先轉換訓練數據本身!

sc.transform(X_train)

array([[-1.224745, -1.224745],
       [ 0.      ,  0.      ],
       [ 1.224745,  1.224745]])

如您所見,我們已經連續fitted然后transformed了我們的訓練數據,而我們只transformed了我們的測試數據而不需要擬合它。 連續擬合和轉換是fit_transform方法的用武之地。因此對於訓練數據,我們可以直接執行以下操作:

X_train = sc.fit_transform(X_train)

array([[-1.224745, -1.224745],
       [ 0.      ,  0.      ],
       [ 1.224745,  1.224745]])

此方法適合數據然后對其進行轉換。 但是你不能只轉換數據而不適合它。 現在您已經使用fit_transform或 just fit擬合了您的訓練數據,現在您可以使用與訓練數據相同的擬合信息轉換您的測試數據。

希望這已經足夠清楚了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM