Czy zawsze lepiej jest używać całego zestawu danych do szkolenia ostatecznego modelu?


24

Powszechną techniką po przeszkoleniu, sprawdzeniu poprawności i przetestowaniu preferowanego modelu uczenia maszynowego jest użycie pełnego zestawu danych, w tym podzestawu testowego, do wyszkolenia ostatecznego modelu w celu wdrożenia go, np. Produktu.

Moje pytanie brzmi: czy zawsze tak jest najlepiej? Co jeśli wydajność faktycznie się pogorszy?

Załóżmy na przykład, że model ocenia około 65% w klasyfikacji podzbioru testowego. Może to oznaczać, że albo model nie jest odpowiednio przeszkolony LUB, że podzbiór testowy składa się z wartości odstających. W tym drugim przypadku trenowanie z nimi ostatecznego modelu zmniejszy jego wydajność, a dowiesz się dopiero po jego wdrożeniu.

Przeformułowanie mojego pierwszego pytania:

Jeśli miałeś jednorazową demonstrację modelu , na przykład wdrożenie go na wbudowanej elektronice na pokładzie drogiego eksperymentu z rakietą, czy zaufałbyś modelowi, który został ponownie przeszkolony z podzbiorem testowym w ostatnim etapie bez konieczności ponownego przetestowany pod kątem nowej wydajności?

Odpowiedzi:


14

Po uzyskaniu optymalnych hiperparamterów dla swojego modelu, po szkoleniu i weryfikacji krzyżowej itp., Teoretycznie można wyszkolić model w całym zestawie danych, aby wdrożyć go do produkcji. Teoretycznie lepiej to się uogólni.

JEDNAK nie można już zgłaszać danych statystycznych / dotyczących wydajności danych testowych, ponieważ nie ma już zestawu danych testowych.

Jeśli wdrożysz model do produkcji przy użyciu całego zestawu danych szkoleniowych i znasz prawdziwe wartości zmiennej docelowej nowych przychodzących danych (tj. Danych, na podstawie których model prognoz przewiduje), możesz obliczyć wskaźniki wydajności w czasie rzeczywistym jako te nowe dane są jak dane testowe (nie były widoczne dla modelu podczas treningu). Na podstawie tego procesu można zaktualizować hiperparametry modeli, aby uzyskać lepszą wydajność.

Ale jeśli znasz docelowe wartości nowych danych, dlaczego miałbyś trenować model?

Ogólnie rzecz biorąc, powiedziałbym, że jeśli masz wystarczającą ilość danych z wystarczającą różnorodnością, to tasowanie i dzielenie danych szkolenie 80:20: test powinien wystarczyć do wyszkolenia solidnego modelu i nie martwić się o problemy uogólniające (zakładając oczywiście, że regularyzujesz Model).


Daje +1, dziękuję za odpowiedź! wygląda na to, że losowe przetasowanie zestawu danych przed podziałem na 80/20 prawdopodobnie sprawia, że ​​czujemy się „statystycznie” pewni (:
pcko1

2
Wydajność zestawu testowego ma się uogólniać na całą populację, o ile wykonałeś to poprawnie. Mimo że nie masz zestawu testów po zastosowaniu metody do całego zestawu danych, wydajność oryginalnego zestawu pociągów / testów poddanych walidacji krzyżowej jest obiektywnym estymatorem wydajności twojego algorytmu treningowego. To jest sedno CV - nie szkolenie lub parametryzacja modelu, ale szacowanie wydajności procesu budowania modelu. Twoja wydajność na dowolnych zestawach testowych przed modelowaniem pełnych danych jest twoją oceną wydajności na pełnych danych.
Nuclear Wang

13

Interesujące pytanie. Osobiście nie widziałem tego w przypadku produktów wprowadzanych do produkcji, ale rozumiem logikę.

Teoretycznie im więcej danych widział twój wdrożony model, tym lepiej powinno się uogólniać. Więc jeśli wyszkoliłeś model na pełnym zestawie dostępnych danych, powinien uogólnić się lepiej niż model, który widział tylko na przykład zestawy pociągów / wartości (np. ~ 90%) z pełnego zestawu danych.

Problem z tym (a przede wszystkim z powodu tego, że dzielimy dane na zestawy kolejowe / wartościowe / testowe!) Polega na tym, że chcemy być w stanie zgłaszać dane statystyczne dotyczące dokładności niewidzialnych danych. Gdy tylko ponownie przeszkolimy model na wszystkich danych, nie będzie już możliwe zgłaszanie takich roszczeń.

[Edytować]

Oto powiązane pytanie na temat Cross-Validated , w którym zaakceptowana odpowiedź przedstawia mi podobne punkty i wymienia inne sposoby robienia rzeczy.


Pętlimy:

  1. wytrenuj model
  2. ocenić wydajność zestawu jeśli jest zadowalający, przejdź do kroku 5
  3. zmień model
  4. przejdź do kroku 1
  5. ocenić wydajność zestawu testowego
  6. Prezentuj model z dokładnością testu znalezioną w kroku 5

W końcu, jeśli uda ci się uzyskać świetny wynik w zestawie testowym, możesz twierdzić, że dobrze się uogólnia. Zatem pytanie, czy ponowne szkolenie w pełnym zbiorze danych poprawi wydajność przyszłych niewidzialnych danych, nie jest czymś, co można dokładnie przetestować. Empiryczne dowody lepszej wydajności w innych powiązanych zestawach problemów byłyby jedynym źródłem lub wskazówką w momencie, w którym należy podjąć decyzję.

Sprawdzeniem rozsądku byłoby ponowne przetestowanie końcowego ponownie wyszkolonego modelu na oryginalnym zestawie testowym; spodziewając się, że uzyska wyniki wyższe niż kiedykolwiek wcześniej, gdy model widział tylko zestaw pociąg / wartość, ponieważ faktycznie widział zestaw testowy podczas treningu. Nie dałoby mi to 100% pewności, że ten ostateczny model jest lepszy we wszystkich przyszłych przypadkach, ale przynajmniej jest tak dobry, jak to tylko możliwe przy danych danych.

Być może istnieją bardziej rygorystyczne argumenty przeciwko robieniu tego, co mówisz (prawdopodobnie naukowo umotywowane), jednak wydaje się atrakcyjne dla praktycznych zastosowań!


Daje +1, dziękuję za twój wysiłek i wskazanie tego wpisu, spóźniłem się! Jeśli chodzi o twoją sugestię przetestowania modelu na końcu całego zestawu danych szkoleniowych, myślę, że nie uzyskasz żadnego cennego wglądu w jego wynik. Po prostu dlatego, że szkolenie algorytmów zwykle opiera się na optymalizacji funkcji kosztów, dlatego wyuczony model jest optymalny, biorąc pod uwagę dane szkolenia. Niska dokładność danych pociągu nie oznacza, że ​​nie jest optymalna, po prostu oznacza, że ​​po prostu nie da sobie rady, biorąc pod uwagę ten zestaw danych i wybraną architekturę algorytmu. Nie można w ten sposób wnioskować o jego zewnętrznej ważności.
pcko1

1
Nie ma za co! Całkowicie zgadzam się z twoim stwierdzeniem (chociaż powiedziałem, aby przetestować ostatni wyszkolony model na danych z testu pochodzenia , a nie trenować). W każdym razie nadal chciałbym zobaczyć, że ostateczny model nie zrobił czegoś zupełnie nieoczekiwanego. Teoria i praktyka nie zawsze się zgadzają :)
n1k31t4

6

W statystycznym uczeniu maszynowym należy podkreślić, że nie ma żadnych gwarancji . Gdy oceniasz wydajność za pomocą ustalonego zestawu, jest to tylko oszacowanie . Szacunki mogą być błędne.

To wymaga trochę przyzwyczajenia się, ale musisz się z tym dobrze czuć. Kiedy powiesz „Co, jeśli wydajność rzeczywiście się pogorszy?”, Odpowiedź jest pewna, że ​​może się zdarzyć. Rzeczywista wydajność może być gorsza niż szacowana / przewidywana. Może być również lepiej. Oba są możliwe. To nieuniknione. Istnieje pewna nieodłączna niepewność.

Oceniając wydajność przy użyciu wstrzymanego zestawu testów, używasz danych z przeszłości, aby spróbować przewidzieć przyszłą wydajność. Jak mówią, wyniki osiągnięte w przeszłości nie stanowią gwarancji przyszłych wyników . To fakt, który musimy zaakceptować.

Nie możesz pozwolić, żeby cię to unieruchomiło. Fakt, że można zrobić gorzej niż przewidywano, nie jest powodem do unikania wdrażania do produkcji modelu wyszkolonego w zakresie danych. W szczególności można również źle postępować, jeśli tego nie zrobisz. Możliwe, że model wytrenowany na wszystkich danych (pociąg + walidacja + test) będzie gorszy niż model wytrenowany tylko na części pociąg + walidacja. Możliwe też, że będzie lepiej. Zamiast szukać gwarancji, musimy zadać sobie pytanie: co daje nam największą szansę na sukces? Co najprawdopodobniej będzie najbardziej skuteczne?

A w tym przypadku, gdy chcesz wdrożyć do produkcji, najlepsze, co możesz zrobić, to wykorzystać wszystkie dostępne dane. Pod względem oczekiwanej wydajności wykorzystanie wszystkich danych nie jest gorsze niż wykorzystanie niektórych danych i potencjalnie lepsze. Tak więc możesz równie dobrze wykorzystać wszystkie dostępne dane, aby wyszkolić model podczas tworzenia modelu produkcyjnego. Sprawy mogą się jeszcze potoczyć źle - zawsze można mieć pecha, za każdym razem, gdy używasz metod statystycznych - ale daje to najlepszą możliwą szansę, aby wszystko poszło dobrze.

W szczególności standardowa praktyka jest następująca:

  1. Zarezerwuj część swoich danych w ustalonym zestawie testowym. Nie ma twardej i szybkiej reguły dotyczącej tego, której części użyć, ale na przykład możesz zarezerwować 20% na zestaw testowy i zachować pozostałe 80% na szkolenie i walidację. Zwykle wszystkie podziały powinny być losowe.

  2. Następnie skorzystaj z danych szkoleniowych i walidacyjnych, aby wypróbować wiele architektur i hiperparametrów, eksperymentując, aby znaleźć najlepszy model, jaki możesz. Weź 80% zatrzymanych na szkolenie i walidację i podziel go na zestaw szkoleniowy i zestaw walidacyjny, i wytrenuj model przy użyciu zestawu szkoleniowego, a następnie zmierz jego dokładność na zestawie sprawdzającym poprawność. Jeśli korzystasz z walidacji krzyżowej, dokonasz tego podziału wiele razy i uśredniasz wyniki w zestawie walidacji; jeśli nie, zrobisz pojedynczy podział (np. 70% / 30% z 80% lub coś w tym stylu) i ocenisz wydajność na zestawie sprawdzania poprawności. Jeśli masz wiele hiperparametrów do wypróbowania, zrób to raz dla każdego potencjalnego ustawienia hiperparametru. Jeśli masz wiele architektur do wypróbowania, zrób to dla każdej architektury kandydującej. Możesz iterować w tym, używając tego, co „

  3. Gdy jesteś szczęśliwy, zamrażasz wybór architektury, hiperparametrów itp. Teraz eksperymentujesz. Po osiągnięciu tego punktu nigdy nie możesz wypróbować żadnych innych opcji (bez uzyskania nowego zestawu testowego) - więc nie naciskaj tego punktu, dopóki nie będziesz pewien, że jesteś gotowy.

  4. Kiedy będziesz gotowy, trenujesz model na pełnym zestawie szkolenia + walidacji (to 80%), korzystając z architektury i hiperparametrów, które wcześniej wybrałeś. Następnie zmierz jego dokładność na odłożonym zestawie testowym. To jest twoje oszacowanie / prognoza tego, jak dokładne będzie to podejście do modelowania. Otrzymasz tutaj jeden numer. Ta liczba jest taka: jeśli nie jesteś z niej zadowolony, nie możesz wrócić do kroków 1 i 2 i przeprowadzić więcej eksperymentów; to byłoby nieprawidłowe.

  5. Wreszcie, do użytku produkcyjnego, możesz wytrenować model na całym zestawie danych, szkolenie + walidacja + zestaw testowy i wprowadzić go do użytku produkcyjnego. Pamiętaj, że nigdy nie mierzysz dokładności tego modelu produkcyjnego, ponieważ nie masz na to żadnych danych; wykorzystałeś już wszystkie dane. Jeśli chcesz oszacować, jak dobrze się sprawdzi, masz prawo wykorzystać szacunkową dokładność z kroku 4 jako swoją prognozę wydajności w produkcji, ponieważ jest to najlepsza dostępna prognoza jego przyszłej wydajności. Jak zawsze nie ma gwarancji - to tylko najlepsze możliwe oszacowanie, biorąc pod uwagę dostępne nam informacje. Z pewnością możliwe jest, że będzie gorzej niż się spodziewałeś lub lepiej niż się spodziewałeś - to zawsze prawda.


Daje +1 za wysiłek, mimo że nie do końca się zgadzam :) np. Gdy wspominasz „Pod względem oczekiwanej wydajności korzystanie z wszystkich danych nie jest gorsze niż korzystanie z niektórych danych i potencjalnie lepsze”. Nie widzę uzasadnienia. Z drugiej strony drugi punkt, o którym wspominasz, wydaje się bardzo ważny, cross-validation! więc zasadniczo trenujesz / zatwierdzasz wszystkie próbki, dlatego prawdopodobnie odrzucasz wartości odstające w wybranym ostatecznym modelu. Dzięki za odpowiedź.
pcko1

@ pcko1, Zasada jest prosta. Jeśli masz dane, czy powinieneś wykorzystać je wszystkie, czy niektóre? Czemu? Może kiedy otrzymamy dane, zanim cokolwiek zrobimy, powinniśmy po prostu wziąć 10% i wyrzucić je i nigdy na nie nie patrzeć. W rzeczywistości, jeśli wyrzucanie niektórych jest dobre, wyrzucanie więcej jest jeszcze lepsze, więc może powinniśmy wyrzucić wszystkie nasze dane. To absurdalne, prawda? Czemu? Sprawdź, czy możesz dowiedzieć się, dlaczego, a następnie spróbuj zastosować to w tej sytuacji. Mam nadzieję, że to sprawia, że ​​myślisz!
DW

3

Jednym z powodów posiadania zestawu danych jest unikanie nadmiernego dopasowania. Jeśli zastosujesz walidację krzyżową, zasadniczo zezwalasz, aby cały zestaw danych działał jako zestaw szkoleniowy, ale ponowne przeszkolenie nie pozwoli ci sprawdzić, czy istnieje oznaka nadmiernego dopasowania. Wydaje mi się, że tak czy inaczej (walidacja krzyżowa lub przekwalifikowanie z całym zestawem danych) nie powinna radykalnie zmienić twojego wyniku (z mojego niewykształconego przypuszczenia), ale nie będziesz w stanie przeprowadzić strojenia hiperparametrów ani zweryfikować wydajności modelu, ponieważ nie mieć zestaw testowy. Trudno powiedzieć, czy skończy się lepiej, ale wydaje mi się, że jedynym sposobem na sprawdzenie jest wykonanie A / B obu modeli w czasie rzeczywistym.

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.