sklearn에서 'transform'과 'fit_transform'의 차이점은 무엇입니까


115

sklearn - 파이썬 도구 상자에서 두 가지 기능이 있습니다 transformfit_transformsklearn.decomposition.RandomizedPCA. 두 가지 기능에 대한 설명은 다음과 같습니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

그러나 그들 사이의 차이점은 무엇입니까?


5
est.fit_transform(X)는 항상와 동일 est.fit(X).transform(X)하지만 일반적으로 더 빠릅니다.
Fred Foo 2014 년

답변:


22

여기서 차이점은 이미 행렬에서 PCA를 계산 한 경우에만 pca.transform을 사용할 수 있습니다.

   In [12]: pc2 = RandomizedPCA(n_components=3)

    In [13]: pc2.transform(X) # can't transform because it does not know how to do it.
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-13-e3b6b8ea2aff> in <module>()
    ----> 1 pc2.transform(X)

    /usr/local/lib/python3.4/dist-packages/sklearn/decomposition/pca.py in transform(self, X, y)
        714         # XXX remove scipy.sparse support here in 0.16
        715         X = atleast2d_or_csr(X)
    --> 716         if self.mean_ is not None:
        717             X = X - self.mean_
        718 

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

    In [14]: pc2.ftransform(X) 
    pc2.fit            pc2.fit_transform  

    In [14]: pc2.fit_transform(X)
    Out[14]: 
    array([[-1.38340578, -0.2935787 ],
           [-2.22189802,  0.25133484],
           [-3.6053038 , -0.04224385],
           [ 1.38340578,  0.2935787 ],
           [ 2.22189802, -0.25133484],
           [ 3.6053038 ,  0.04224385]])

사용 .transform하려면 pca에 변환 규칙을 가르쳐야합니다.

In [20]: pca = RandomizedPCA(n_components=3)

In [21]: pca.fit(X)
Out[21]: 
RandomizedPCA(copy=True, iterated_power=3, n_components=3, random_state=None,
       whiten=False)

In [22]: pca.transform(z)
Out[22]: 
array([[ 2.76681156,  0.58715739],
       [ 1.92831932,  1.13207093],
       [ 0.54491354,  0.83849224],
       [ 5.53362311,  1.17431479],
       [ 6.37211535,  0.62940125],
       [ 7.75552113,  0.92297994]])

In [23]: 

특히 PCA 변환은 행렬 X의 PCA 분해로 얻은 기저 변화를 행렬 Z에 적용합니다.


내 질문을 수정했습니다. 두 함수는 동일한 종류의 값을 반환합니다.
tqjustc

2
당신은 의미합니까 fit_transform두 가지 기능의 조합 fit과는 transform?
tqjustc

6
동일한 행렬에서 적합 및 변환을 사용하는 경우 예. 행렬 x를 맞추고 행렬 z를 변환하지 않으면
Donbeo

Line In [14]가 "ftransform"이라고하는데 그게 뭔데요?
Rajdeep Biswas

92

에서 추정 API를 scikit 배우기 ,

fit() : 학습 데이터에서 학습 모델 매개 변수 생성에 사용

transform(): fit()메서드에서 생성 된 매개 변수 , 모델에 적용하여 변환 된 데이터 세트를 생성합니다.

fit_transform(): 동일한 데이터 세트에 대한 fit()transform()API의 조합

여기에 이미지 설명 입력

체크 아웃 장 - 4 이부터 에서 & 대답 stackexchange 더 선명도


54

이러한 방법은 주어진 데이터의 중심 / 특징 스케일에 사용됩니다. 기본적으로 특정 범위 내에서 데이터를 정규화하는 데 도움이됩니다.

이를 위해 Z-score 방법을 사용합니다.

Z- 점수

훈련 데이터 세트에서이 작업을 수행합니다.

1. 적합 () : 메서드는 매개 변수 μ와 σ를 계산하여 내부 객체로 저장합니다.

2. Transform () : 이러한 계산 된 매개 변수를 사용하는 메서드는 특정 데이터 세트에 변환을 적용합니다.

3. Fit_transform () : 데이터 셋 변환을 위해 fit () 및 transform () 메서드를 결합합니다.

기능 확장 / 표준화를위한 코드 조각 (train_test_split 이후).

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_transform(X_train)
sc.transform(X_test)

테스트 세트에 동일한 (훈련 세트 동일한 두 매개 변수 μ 및 σ (값)) 매개 변수 변환을 적용합니다.


1
이 설명에 감사드립니다. '적합'값이 이월되어 도움이되었는지 궁금했습니다!
Adib

2
코드 예는 +1입니다. 기차 세트에서 fit_transform을 사용한 다음 테스트 세트를 변환 할 수 있는지 또는 기차에서 별도의 적합이 필요한지 여부에 대해 혼란 스러웠습니다
Vivek

2
테스트 테스트는 X_train 데이터 세트에서 계산 된 μ 및 σ를 사용해야하므로 fit_tranform (..)을 X_test에 사용할 수 없습니다. fit_tranform (..)은 훈련 데이터 세트에서만 사용할 수 있습니다. 내 이해를 수정하십시오.
daya

1
그래 정확 해. 이 X_test 데이터를 표준화 X_train에서 학습 PARAMS 사용으로 만 테스트에 사용될 수있다 (..) 변환
shaurya을 uppal

7

방법 간의 일반적인 차이점 :

  • fit (raw_documents [, y]) : 원시 문서에있는 모든 토큰의 어휘 사전을 학습합니다.
  • fit_transform (raw_documents [, y]) : 어휘 사전을 배우고 용어 문서 행렬을 반환합니다. 이는 fit 다음에 변환이 따르는 것과 동일하지만 더 효율적으로 구현됩니다.
  • transform (raw_documents) : 문서를 문서 용어 매트릭스로 변환합니다. 적합에 맞는 어휘 또는 생성자에게 제공된 어휘를 사용하여 원시 텍스트 문서에서 토큰 수를 추출하십시오.

fit_transform과 transform은 모두 동일한 문서 용어 행렬을 반환합니다.

출처


4

.fit()& 의 기본적인 차이점은 다음과 같습니다 .fit_transform().

.적당한():

모델을 맞추고 실행할 모델을 만들기 위해 두 개의 객체 / 매개 변수 (x, y)를 갖는지도 학습에서 사용됩니다. 여기서 우리가 예측할 내용을 알고 있습니다.

.fit_transform () :

하나의 객체 / 파라미터 (x)를 갖는 비지도 학습에서 사용됩니다. 여기서 우리가 무엇을 예측할지 모릅니다.


매우 정확하지 않습니다. fit ()는 비지도 학습에서도 사용할 수 있습니다. 그러나 간결함을 위해 지나치게 단순화하려는 경우 초보자에게 설명하는 좋은 방법입니다.
Rajdeep Biswas

2

평신도의 관점에서 fit_transform은 일부 계산을 수행 한 다음 변환을 수행하는 것을 의미합니다 (예 : 일부 데이터에서 열의 평균을 계산 한 다음 누락 된 값을 대체 함). 따라서 훈련 세트의 경우 변환을 계산하고 수행해야합니다.

그러나 테스트 세트의 경우 머신 러닝은 학습 세트 중에 학습 한 내용을 기반으로 예측을 적용하므로 계산할 필요가없고 변환 만 수행합니다.


1

각각을 사용하는 이유와시기 :

모든 응답은 꽤 좋지만 각 방법을 사용하는 이유와 시간을 강조하겠습니다.

fit (), transform (), fit_transform ()

일반적으로 (X, y)를 데이터 세트로 사용하는지도 학습 문제가 있으며이를 훈련 데이터와 테스트 데이터로 분할합니다.

import numpy as np
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y)

X_train_vectorized = model.fit_transform(X_train)
X_test_vectorized = model.transform(X_test)

우리가 토크 나이저를 맞추고 있다고 상상해보십시오. X를 맞추면 우리는 테스트 데이터를 토크 나이저에 포함하고 있지만이 오류를 여러 번 보았습니다!

올바른 방법은 X_train에만 적합하는 것입니다. "미래 데이터"를 모르기 때문에 X_test 데이터를 사용하여 아무것도 맞출 수 없기 때문입니다!

그런 다음 테스트 데이터를 변환 할 수 있지만 개별적으로 다른 방법이 있습니다.

마지막 팁 : X_train_transformed = model.fit_transform(X_train)은 다음과 동일 X_train_transformed = model.fit(X_train).transform(X_train)하지만 첫 번째 팁 이 더 빠릅니다.

내가 "모델"이라고 부르는 것은 일반적으로 스케일러, tfidf 변환기, 다른 종류의 벡터 화기, 토크 나이저 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.