Jestem początkujących do nauki danych i nie rozumiem różnicę między fit
i fit_transform
metody w scikit-learn. Czy ktoś może po prostu wyjaśnić, dlaczego potrzebujemy transformacji danych?
Co to znaczy dopasowywanie modelu do danych treningowych i przekształcanie w dane testowe? Czy oznacza to na przykład przekształcenie zmiennych kategorialnych w liczby w pociągu i przekształcenie nowego zestawu funkcji do testowania danych?
python
scikit-learn
Kaggle
źródło
źródło
fit
natraining dataset
i użyćtransform
metody naboth
- zestaw danych szkoleniowych i zbiór danych testowegoOdpowiedzi:
Aby wyśrodkować dane (aby miał zero średniej i błąd standardowy jednostki), odejmujesz średnią, a następnie dzielisz wynik przez odchylenie standardowe.
fit()
transform()
fit_transform()
fit()
transform()
źródło
get_params()
coef_
(tj. Nachylenie i punkt przecięcia), a nie parametry zwracane przezget_params()
(które zamiast tego zwracają zestaw argumentów konstruktora modelu z powiązanymi z nimi wartościami).fit_transform()
ponieważ nie pozwoliłoby nam to uzyskać dostępu do wewnętrznego stanu obiektów, aby przekształcić kolejne przykłady z tymi samymi parametrami, które zostały uzyskane przy użyciufit()
początkowego zestawu danych? Dzieje się tak na przykład wtedy, gdy masz testowy zestaw danych i chcesz przekształcić zestaw testowy, aby przekazać go wyszkolonemu klasyfikatorowi.t.fit_transform(train_data)
,t
jest wyposażone, dzięki czemu można bezpiecznie używaćt.transform(test_data)
.Poniższy opis opiera się na
fit_transform
zImputer
klasą, ale idea jest taka sama dlafit_transform
innych klas scikit_learn podobaMinMaxScaler
.transform
zastępuje brakujące wartości liczbą. Domyślnie liczba ta oznacza kolumny niektórych wybranych danych. Rozważ następujący przykład:Teraz imputer nauczył się używać średniej (1 + 8) / 2 = 4,5 dla pierwszej kolumny i średniej (2 + 3 + 5,5) / 3 = 3,5 dla drugiej kolumny, gdy zostanie zastosowana do danych dwukolumnowych:
dostajemy
Tak więc według
fit
imputera oblicza średnie kolumn z niektórych danych, i przeztransform
to stosuje te środki do niektórych danych (co po prostu zastępuje brakujące wartości środkami). Jeśli oba te dane są takie same (tj. Dane do obliczenia średnich i dane, które dotyczą tych środków), możesz użyć,fit_transform
co w zasadziefit
następuje po nimtransform
.Teraz twoje pytania:
„Z różnych powodów wiele rzeczywistych zestawów danych zawiera brakujące wartości, często kodowane jako spacje, NaN lub inne symbole zastępcze. Takie zestawy danych są jednak niezgodne z estymatorami scikit-learn, które zakładają, że wszystkie wartości w tablicy są numeryczne” ( źródło )
fit
O imputer nie ma nic wspólnego zfit
używanych w modelu oprawy. Tak więc użycie imputera dofit
danych treningowych po prostu oblicza średnie z każdej kolumny danych treningowych. Wykorzystanietransform
danych testowych zastępuje następnie brakujące wartości danych testowych środkami obliczonymi na podstawie danych treningowych.źródło
W kategoriach laika fit_transform oznacza wykonanie pewnych obliczeń, a następnie transformację (powiedzmy obliczenie średnich kolumn z niektórych danych, a następnie zastąpienie brakujących wartości). Więc dla zestawu treningowego musisz zarówno obliczyć, jak i wykonać transformację.
Ale w przypadku zestawu testowego uczenie maszynowe stosuje predykcję na podstawie tego, czego nauczył się podczas zestawu szkoleniowego, więc nie trzeba go obliczać, po prostu wykonuje transformację.
źródło
Te metody są używane do transformacji zestawu danych w scikit-learn:
Weźmy przykład Skalowania wartości w zbiorze danych:
W tym przypadku metoda dopasowania zastosowana do zestawu danych szkoleniowych uczy się parametrów modelu (na przykład średniej i odchylenia standardowego). Następnie musimy zastosować metodę transformacji w zbiorze danych szkoleniowych, aby uzyskać przekształcony (skalowany) zestaw danych szkoleniowych. Możemy również wykonać oba te kroki w jednym kroku, stosując fit_transform w zbiorze danych szkoleniowych.
Dlaczego więc potrzebujemy 2 oddzielnych metod - dopasowania i przekształcenia ?
W praktyce musimy mieć osobny zestaw danych szkoleniowych i testowych, i tam właśnie pomaga oddzielna metoda dopasowania i transformacji . Stosujemy dopasowanie w zbiorze danych szkoleniowych i stosujemy metodę transformacji zarówno w zbiorze danych szkoleniowych, jak i zbiorze danych testowych. Zatem trening, a także zestaw danych testowych są następnie przekształcane (skalowane) przy użyciu parametrów modelu, których nauczyliśmy się przy stosowaniu metody dopasowania zestawu danych treningowych.
Przykładowy kod:
źródło
To nie jest odpowiedź techniczna, ale mam nadzieję, że pomocne jest budowanie naszej intuicji:
Po pierwsze, wszystkie estymatory są trenowane (lub „dopasowują”) do niektórych danych treningowych. Ta część jest dość prosta.
Po drugie, wszystkie estymatory scikit-learn mogą być używane w potoku, a idea w potoku polega na tym, że dane przepływają przez potok. Po dopasowaniu do określonego poziomu w potoku dane są przekazywane do następnego etapu w potoku, ale oczywiście dane należy w jakiś sposób zmienić (przekształcić); w przeciwnym razie ten etap nie byłby w ogóle potrzebny. Tak więc transformacja jest sposobem transformacji danych w celu zaspokojenia potrzeb następnego etapu w przygotowaniu.
Jeśli nie używasz potoku, nadal uważam, że warto pomyśleć o tych narzędziach uczenia maszynowego w ten sposób, ponieważ nawet najprostszy klasyfikator nadal wykonuje funkcję klasyfikacji. Pobiera na wejściu niektóre dane i tworzy wynik. To też jest rurociąg; po prostu bardzo prosty.
Podsumowując, fit wykonuje szkolenie, transformacja zmienia dane w potoku, aby przekazać je do następnego etapu w potoku, a fit_transform wykonuje dopasowanie i transformację w jednym możliwie zoptymalizowanym kroku.
źródło
Przechodząc do innego pytania, najpierw budujesz model w zestawie szkoleniowym, który jest (model uczy się wzorców lub zachowania danych z zestawu szkoleniowego), a kiedy uruchamiasz ten sam model w zestawie testowym, próbuje zidentyfikować podobne wzorce lub zachowania po zidentyfikowaniu wyciąga wnioski i odpowiednio podaje wyniki szkolenia
źródło
Zastanów się nad zadaniem, które wymaga od nas normalizacji danych. Na przykład, możemy zastosować normalizację min-max lub normalizację z-score. W modelu występują pewne nieodłączne parametry. Wartości minimalne i maksymalne w normalizacji min-max oraz średnia i odchylenie standardowe w normalizacji z-score. Funkcja fit () oblicza wartości tych parametrów.
Funkcja transformacji stosuje wartości parametrów do danych rzeczywistych i podaje znormalizowaną wartość.
Funkcja fit_transform () wykonuje obie czynności w tym samym kroku.
Pamiętaj, że ta sama wartość jest uzyskiwana niezależnie od tego, czy wykonujemy dwa kroki, czy jeden krok.
źródło
„fit” oblicza średnią i std do późniejszego skalowania. (tylko obliczenia), nic ci nie jest dane .
„transformacja” wykorzystuje wcześniej obliczoną średnią i std do automatycznego skalowania danych (odejmij średnią od wszystkich wartości, a następnie podziel ją przez std).
„fit_transform” robi oba jednocześnie. Możesz to zrobić za pomocą 1 wiersza kodu zamiast 2.
Teraz spójrzmy na to w praktyce:
W przypadku zestawu szkoleniowego X wykonujemy „fit_transform”, ponieważ musimy obliczyć średnią i standard, a następnie użyć go do automatycznego skalowania danych. W przypadku zestawu testowego X mamy już wartość średnią i standardową, więc wykonujemy tylko część „przekształcania”.
To bardzo proste. Świetnie ci idzie. Oby tak dalej, przyjacielu :-)
źródło