sklearn - 파이썬 도구 상자에서 두 가지 기능이 있습니다 transform
및 fit_transform
약 sklearn.decomposition.RandomizedPCA
. 두 가지 기능에 대한 설명은 다음과 같습니다.
그러나 그들 사이의 차이점은 무엇입니까?
sklearn - 파이썬 도구 상자에서 두 가지 기능이 있습니다 transform
및 fit_transform
약 sklearn.decomposition.RandomizedPCA
. 두 가지 기능에 대한 설명은 다음과 같습니다.
그러나 그들 사이의 차이점은 무엇입니까?
답변:
여기서 차이점은 이미 행렬에서 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에 적용합니다.
fit_transform
두 가지 기능의 조합 fit
과는 transform
?
에서 추정 API를 scikit 배우기 ,
fit()
: 학습 데이터에서 학습 모델 매개 변수 생성에 사용
transform()
: fit()
메서드에서 생성 된 매개 변수 , 모델에 적용하여 변환 된 데이터 세트를 생성합니다.
fit_transform()
: 동일한 데이터 세트에 대한 fit()
및 transform()
API의 조합
체크 아웃 장 - 4 이부터 책 에서 & 대답 stackexchange 더 선명도
이러한 방법은 주어진 데이터의 중심 / 특징 스케일에 사용됩니다. 기본적으로 특정 범위 내에서 데이터를 정규화하는 데 도움이됩니다.
이를 위해 Z-score 방법을 사용합니다.
훈련 데이터 세트에서이 작업을 수행합니다.
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)
테스트 세트에 동일한 (훈련 세트 동일한 두 매개 변수 μ 및 σ (값)) 매개 변수 변환을 적용합니다.
방법 간의 일반적인 차이점 :
fit_transform과 transform은 모두 동일한 문서 용어 행렬을 반환합니다.
.fit()
& 의 기본적인 차이점은 다음과 같습니다 .fit_transform()
.
모델을 맞추고 실행할 모델을 만들기 위해 두 개의 객체 / 매개 변수 (x, y)를 갖는지도 학습에서 사용됩니다. 여기서 우리가 예측할 내용을 알고 있습니다.
하나의 객체 / 파라미터 (x)를 갖는 비지도 학습에서 사용됩니다. 여기서 우리가 무엇을 예측할지 모릅니다.
평신도의 관점에서 fit_transform은 일부 계산을 수행 한 다음 변환을 수행하는 것을 의미합니다 (예 : 일부 데이터에서 열의 평균을 계산 한 다음 누락 된 값을 대체 함). 따라서 훈련 세트의 경우 변환을 계산하고 수행해야합니다.
그러나 테스트 세트의 경우 머신 러닝은 학습 세트 중에 학습 한 내용을 기반으로 예측을 적용하므로 계산할 필요가없고 변환 만 수행합니다.
모든 응답은 꽤 좋지만 각 방법을 사용하는 이유와 시간을 강조하겠습니다.
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 변환기, 다른 종류의 벡터 화기, 토크 나이저 ...
est.fit_transform(X)
는 항상와 동일est.fit(X).transform(X)
하지만 일반적으로 더 빠릅니다.