Dlaczego nie wytrenować ostatecznego modelu na całych danych po przeprowadzeniu danych testowych dostrajania hiperparametrów i danych walidacyjnych na podstawie wyboru modelu?

9

Przez całe dane rozumiem pociąg + test + walidacja

Po poprawieniu hiperparametru przy użyciu danych sprawdzania poprawności i wybraniu modelu przy użyciu danych testowych, czy nie lepiej byłoby, aby model został wyszkolony na całych danych, tak aby parametry były lepiej wyszkolone, niż model wyuczony na dane pociągu

Apoorva Abhishekh
źródło
2
NIGDY nie należy poprawiać hiperparametrów za pomocą danych testowych. Po prostu zepsułeś cały eksperyment, usuwając ślepą grupę kontrolną (zestaw testowy).
JahKnows,
@JahKnows Po zakończeniu dostrajania parametrów hiper dla modelu, nie rozumiem szkody, z wyjątkiem tego, że nie będę wiedział, jak dobrze uogólnia się na innym zestawie danych. Jak zepsułem mój eksperyment? czy coś mi brakuje?
Apoorva Abhishekh

Odpowiedzi:

8

Pytanie jest błędne. Wiele osób robi to, co mówisz, że „nie może”.

W rzeczywistości implementacja wyszukiwania siatki w szeroko wdrażanym pakiecie sklearn właśnie to robi. Chyba refit=Falseże przekwalifikuje ostateczny model z wykorzystaniem całych danych.

Myślę, że w przypadku niektórych hiperparametrów może to nie być bardzo pożądane, ponieważ są one względne w stosunku do ilości danych. Rozważmy na przykład min_samples_leaftaktykę wstępnego przycinania drzewa decyzyjnego . Jeśli masz więcej danych, wstępne przycinanie może nie działać tak, jak chcesz.

Ale znowu, większość ludzi w rzeczywistości przekwalifikowuje się, wykorzystując całe dane po weryfikacji krzyżowej, aby uzyskać najlepszy możliwy model.

Dodatek: @NeilSlater mówi poniżej, że niektóre osoby powstrzymują się przed CV. Innymi słowy, dzielą test na pociąg, a następnie dokonują wyboru modelu podczas szkolenia. Według niego, ponownie trenują, używając oryginalnego zestawu treningowego podzielonego, ale nie zestawu testowego. Zestaw testowy jest następnie wykorzystywany do ostatecznego oszacowania modelu. Osobiście widzę w tym trzy wady: (a) nie rozwiązuje problemu, o którym wspomniałem, ponieważ niektóre hiperparametry zależą od wielkości treningu, ponieważ i tak trenujesz ponownie, (b) podczas testowania wielu modeli wolę bardziej wyrafinowane metody takie jak zagnieżdżona weryfikacja krzyżowa, aby żadne dane nie zostały zmarnowane, oraz (c) wstrzymanie jest okropną metodą wnioskowania o tym, jak model uogólni się, gdy będzie mało danych.

Ricardo Cruz
źródło
Ta funkcja polega na ponownym korzystaniu z weryfikacji krzyżowej, nadal nie zaleca się ponownego wykorzystywania danych testowych, ponieważ masz tylko założenia z weryfikacji krzyżowej i nie ma pomiaru wydajności. Każdy błąd lub parametr problemu (taki jak podany przez Ciebie przykład) może w przeciwnym razie pogorszyć model niewykrywalnie.
Neil Slater,
@NeilSlater Nie rozumiem tego, co powiedziałeś tutaj: „Ta funkcja polega na ponownym korzystaniu z weryfikacji krzyżowej”
Ricardo Cruz,
„funkcja” -> refitopcja funkcji GridSearchCV. Nie dostosowuje się ponownie do uwzględnienia danych testowych (nawet nie widzi tych danych).
Neil Slater,
@ NeilSlater, możesz łatwo sprawdzić kod dla siebie, jeśli mi nie wierzysz (tutaj) . Jeśli refit = True, to „dopasuj najlepszy estymator, używając całego zestawu danych”.
Ricardo Cruz,
1
@NeilSlater, to nie jest moje doświadczenie, ale dodałem twoje doświadczenie do mojego komentarza, aby inni mogli z niego skorzystać. Dziękuję Ci.
Ricardo Cruz,
1

Tak, możesz.

Ponieważ dane testowe powinny pochodzić z podobnej dystrybucji do danych pociągu, nie zepsujesz swojego modelu. Jeśli odpowiednio przeszkoliłeś model, nie zauważysz żadnej znaczącej zmiany (oprócz lepszej metryki dokładności w stosunku do poprzednich danych testu / walidacji).

Jednak rzadko jest prawdą, że dane testowe pochodzą z dokładnie tej samej dystrybucji co dane pociągu, więc w prawdziwym scenariuszu przypadku zastosowania można uzyskać lepszą uogólnienie modelu.

Il'ya Zhenin
źródło
1
Problem z włączeniem danych testowych zgodnie z tą sugestią polega na tym, że nie masz obecnie pomiaru, jak dobrze model uogólnia się. Tak, możesz oczekiwać, że lepiej się uogólni. Jednak nie wiesz , ponieważ usunąłeś swoją zdolność do pomiaru. Sugeruję dodać to zastrzeżenie i wyjaśnić, dlaczego czasami jest to w porządku (np. Przy otrzymywaniu nowych danych możesz traktować to jako nowy zestaw testowy i z czasem budować nowy pomiar, mając jednocześnie nadzieję, że skorzystasz z lepszego modelu - to jednak ryzyko)
Neil Slater
@NeilSlater: Rozumiem, że usunąłem moją zdolność do mierzenia, jak dobrze uogólni się na innym zbiorze danych. Ale jeśli mam zarówno test, jak i blokadę, nawet po dostrajaniu hiperparametrów, mogę ponownie wyszkolić swój model na trenowaniu + test, nadal będę miał blokadę, aby sprawdzić, czy mój model się uogólnia. Wiem, że to różni się od tego, o co prosiłem. Ale chcę poznać twój pogląd.
Apoorva Abhishekh
1
@ApoorvaAbhishekh: Jeśli miałeś jeszcze jeden zestaw danych wstrzymujących, to tak, możesz użyć tego jako nowego zestawu testowego w stosunku do nowego modelu wyszkolonego na new_train = {stary pociąg, stary cv, stary test}. Wtedy uzyskasz miarę uogólnienia. Chociaż musisz uważać, aby nie nadużywać go - jeśli okaże się, że jest problem z nowym połączonym zestawem (np. Wczesne zatrzymanie wymaga zmiany z powodu większej ilości danych), nie możesz również użyć go jako nowego zestawu cv. . . chyba że masz jeszcze jedną blokadę ustawioną w rezerwie. . .
Neil Slater
@NeilSlater Teoretycznie potrzebujesz nowego zestawu danych, aby poznać wydajność. W praktyce możesz mieć pewność, że Twój model działa dobrze, ponieważ pracowałeś z nim przez długi czas i wiesz, czego się spodziewać. Ale zwykle masz również inne dane, aby sprawdzić wydajność modelu, na przykład w wizji komputerowej - dane nieznakowane. To nie w porządku, ale też działa. Oczywiście jest to skrajny przypadek, ale chcę powiedzieć, że może działać. Sam zawsze mam zestaw testowy, którego nie mieszam w trening.
Il'ya Zhenin
1

Odpowiedź na to pytanie zależy od używanego algorytmu szkoleniowego (technologii). Na przykład widziałem pewne podejścia w klasyfikacji zespołów, w których zestawy szkoleniowe i walidacyjne (ale nie testowe) są na końcu łączone. Bardzo ważne jest, aby wiedzieć, że nawet walidacja jest wykorzystywana głównie do decydowania o hiperparametrach, niektóre z tych hiperparametrów mogą być funkcją wykorzystanych danych do treningu. Na przykład w walidacji DNN używanej do tego, by wiedzieć, kiedy przestać, ponieważ nadmierne dopasowanie może się zdarzyć w wyniku ciągłego dostrajania parametrów (wag) sieci, potrzebujemy sposobu, aby wiedzieć, kiedy przestać. Bez zestawu walidacyjnego będziesz chodził ślepo podczas treningu. Z drugiej strony, jeśli użyjesz dokładnie takiej samej liczby iteracji, jak określono wcześniej, istnieje wysoki problem, którego nie zyskasz na tych dodatkowych próbkach. Zestaw testowy w ogóle nie powinien być dotykany, jak wskazano powyżej, bez zestawu testowego nie będziesz miał metody oceny swojego modelu. To hazard, NIE MOŻESZ dostarczyć żadnego modelu ani rozwiązania bez oszacowania jego dokładności na prawdziwym rozkładzie danych (który reprezentują dane testowe).

Baszar Haddad
źródło
Miałem na myśli po treningu danych pociągu, strojeniu hiperparametrów danych walidacyjnych i wybraniu podstawy modelu dane testowe, czy mogę trenować bazę mojego modelu całe dane. Lub Czy mogę połączyć dane treningowe i dane walidacyjne po zakończeniu strojenia hiperparametrów i oszacować dokładność za pomocą danych testowych. Przepraszamy za nieprawidłowe pisanie. Poprawiłem to teraz.
Apoorva Abhishekh