Czy powinniśmy stosować normalizację również do testowania danych?


17

Robię projekt dotyczący problemu z identyfikacją autora. Zastosowałem normalizację tf-idf do trenowania danych, a następnie wyszkoliłem svm na tych danych.

Teraz, używając klasyfikatora, powinienem również znormalizować dane testowe. Wydaje mi się, że podstawowym celem normalizacji jest sprawienie, aby algo uczenia się przywiązywało większą wagę do ważniejszych funkcji podczas nauki. Więc po przeszkoleniu już wie, które funkcje są ważne, a które nie. Czy więc istnieje potrzeba zastosowania normalizacji również do testowania danych?

Jestem nowy w tej dziedzinie. Więc proszę zignoruj, jeśli pytanie wydaje się głupie?


4
Twoje dane testowe powinny być w tej samej skali co dane treningowe.
Jon

Odpowiedzi:


37

Tak, musisz zastosować normalizację do danych testowych, jeśli twój algorytm działa lub potrzebuje znormalizowanych danych treningowych *.

Jest tak, ponieważ model działa na reprezentacji podanej przez wektory wejściowe. Skala tych liczb jest częścią przedstawienia. To trochę przypomina konwersję stóp i metrów. . . model lub formuła normalnie działałyby tylko z jednym typem jednostki.

Nie tylko potrzebujesz normalizacji, ale powinieneś zastosować dokładnie takie samo skalowanie jak dla danych treningowych. Oznacza to przechowywanie skali i przesunięcia używanych z danymi treningowymi i ponowne ich użycie. Częstym błędem początkującego jest osobna normalizacja pociągu i testowanie danych.

W Python i SKLearn możesz znormalizować wartości wejściowe / X za pomocą Standardowego skalera w następujący sposób:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

Zwróć uwagę, jak konwersja train_Xza pomocą funkcji, która pasuje (oblicza parametry), a następnie normalizuje się. Podczas gdy test_Xkonwersja po prostu przekształca się, wykorzystując te same parametry, których nauczył się z danych pociągu.

Stosowana normalizacja tf-idf powinna działać podobnie, ponieważ uczy się niektórych parametrów z zestawu danych jako całości (częstotliwość słów we wszystkich dokumentach), a także z wykorzystaniem współczynników znalezionych w każdym dokumencie.


* Niektóre algorytmy (takie jak te oparte na drzewach decyzyjnych) nie wymagają znormalizowanych danych wejściowych i mogą poradzić sobie z funkcjami, które mają różne nieodłączne skale.


+1 za wyjaśnienie, że parametry normalizacyjne dla testu powinny być takie same jak te określone na podstawie szkolenia. Rozumiem, że ta logika obejmuje również wszelkie zestawy sprawdzania poprawności.
Greenstick,

@Greenstick: Tak, oczywiście, dotyczy to wszystkich danych wprowadzonych do modelu. W tym nowe dane, jeśli model zostanie wykorzystany do wnioskowania w produkcji. Myślę, że odpowiedź jest wystarczająco długa, ale nie obejmuje tego wszystkiego, a punkt, w którym dzielisz dane sprawdzania poprawności, jest bardzo różny (wiele modeli ma to wbudowane w etap szkolenia), więc nie mogłem pokazać przykładu kodu.
Neil Slater,

2
Czy należy skalować (fit_transform) dane testowe Z danymi treningowymi? Czy zrobić to osobno, używając tej samej skali (scaler.transform)?
Bob Ebert,

2
@BobEbert: Możesz to zrobić. Technicznie rzecz biorąc, możesz wyciec niewielką ilość informacji z testu do szkolenia, jeśli dopasujesz skaler do połączonego zestawu danych - więc „oficjalna” wersja może dopasować skaler tylko do danych treningowych i zastosować je do wszystkich innych zestawy danych później. Jednak ten wyciek jest bardzo niewielki i nigdy nie widziałem, aby powodował problem w praktyce, jeśli dopasujesz skaler do wszystkich posiadanych danych.
Neil Slater,

Dziękujemy za potwierdzenie mojego założenia, że ​​muszę używać skalowania opartego na zestawie danych szkoleniowych dla danych testowych. Ale czy możesz podać link z wyjaśnieniem tego? EDYCJA: nieważne, wyjaśnienia są tutaj: datascience.stackexchange.com/questions/58597/…
crazysantaclaus

6

Zdecydowanie powinieneś znormalizować swoje dane. Normalizujesz dane dla następujących celów:

  • Za posiadanie różnych funkcji w tej samej skali, co przyspiesza proces uczenia się.

  • Do uczciwej pielęgnacji różnych funkcji bez dbania o wagę.

Po treningu Twój algorytm uczenia się nauczył się radzić sobie z danymi w formie skalowanej, więc musisz znormalizować dane testowe za pomocą parametrów normalizujących używanych do danych treningowych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.