W przyborniku sklearn-python są dwie funkcje transform
i fit_transform
about sklearn.decomposition.RandomizedPCA
. Poniżej opisano dwie funkcje
Ale jaka jest między nimi różnica?
W przyborniku sklearn-python są dwie funkcje transform
i fit_transform
about sklearn.decomposition.RandomizedPCA
. Poniżej opisano dwie funkcje
Ale jaka jest między nimi różnica?
Odpowiedzi:
Tutaj różnica, której możesz użyć pca.transform tylko wtedy, gdy już obliczyłeś PCA na macierzy
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]])
jeśli chcesz używać .transform
, musisz nauczyć swoją pca regułę transformacji
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]:
W szczególności transformacja PCA zastosuj zmianę bazy uzyskaną przy dekompozycji PCA macierzy X na macierz Z.
fit_transform
jest to połączenie dwóch funkcji fit
i transform
?
W api estymatora scikit-Learn ,
fit()
: służy do generowania parametrów modelu uczenia się z danych szkoleniowych
transform()
: parametry wygenerowane na podstawie fit()
metody, zastosowane do modelu w celu wygenerowania przekształconego zestawu danych.
fit_transform()
: kombinacja fit()
i transform()
API w tym samym zbiorze danych
Sprawdź Rozdział-4 z tej książki i odpowiedź z stackexchange dla większej przejrzystości
Metody te służą do wyśrodkowania / skalowania cech danych. Zasadniczo pomaga znormalizować dane w określonym zakresie
W tym celu używamy metody Z-score.
Robimy to na zbiorze uczącym danych.
1. Fit (): Metoda oblicza parametry μ i σ i zapisuje je jako obiekty wewnętrzne.
2. Transform (): Metoda wykorzystująca te obliczone parametry stosuje transformację do określonego zbioru danych.
3. Fit_transform (): łączy metody fit () i transform () w celu transformacji zbioru danych.
Fragment kodu do skalowania / standaryzacji funkcji (po train_test_split).
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_transform(X_train)
sc.transform(X_test)
Stosujemy tę samą (zestaw uczący te same dwa parametry μ i σ (wartości)) transformację parametru w naszym zbiorze testowym.
Ogólna różnica między metodami:
Zarówno fit_transform, jak i transform zwracają tę samą macierz terminów dokumentu.
Oto podstawowa różnica między .fit()
& .fit_transform()
:
jest używany w uczeniu nadzorowanym, mając dwa obiekty / parametry (x, y), aby dopasować model i stworzyć model do uruchomienia, gdzie wiemy, że to, co będziemy przewidywać
jest używany w uczeniu nienadzorowanym, mając jeden obiekt / parametr (x), gdzie nie wiemy, co będziemy przewidywać.
Mówiąc prościej, fit_transform oznacza wykonanie pewnych obliczeń, a następnie wykonanie transformacji (powiedzmy obliczenie średnich kolumn z niektórych danych, a następnie zastąpienie brakujących wartości). Tak więc w przypadku zestawu treningowego musisz zarówno obliczyć, jak i wykonać transformację.
Ale w przypadku zestawu testowego uczenie maszynowe stosuje przewidywanie na podstawie tego, czego nauczyliśmy się podczas zestawu uczącego, więc nie musi obliczać, po prostu wykonuje transformację.
Wszystkie odpowiedzi są całkiem dobre, ale kładę nacisk na DLACZEGO i KIEDY stosuję każdą metodę.
fit (), transform (), fit_transform ()
Zwykle mamy nadzorowany problem uczenia się z (X, y) jako zbiorem danych i dzielimy go na dane treningowe i dane testowe:
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)
Wyobraź sobie, że dopasowujemy tokenizer, jeśli dopasujemy X, dołączamy dane testowe do tokenizera, ale widziałem ten błąd wiele razy!
Prawidłowe jest dopasowanie TYLKO do X_train , ponieważ nie znasz "swoich przyszłych danych", więc nie możesz użyć danych X_test do dopasowania czegokolwiek!
Następnie możesz przekształcić dane testowe, ale oddzielnie, dlatego istnieją różne metody.
Ostatnia wskazówka: X_train_transformed = model.fit_transform(X_train)
odpowiada:
X_train_transformed = model.fit(X_train).transform(X_train)
ale pierwsza jest szybsza.
Zwróć uwagę, że to, co nazywam „modelem”, zwykle będzie skalerem, transformatorem tfidf, innym rodzajem wektoryzatora, tokenizatorem ...
est.fit_transform(X)
jest zawsze równoważneest.fit(X).transform(X)
, ale zwykle szybsze.