Jak korzystać z zestawu danych „testowych” po weryfikacji krzyżowej?

25

W niektórych wykładach i samouczkach , które widziałem, sugerują podzielenie danych na trzy części: szkolenie, walidacja i test. Nie jest jednak jasne, w jaki sposób należy używać zestawu danych testowych, ani w jaki sposób to podejście jest lepsze niż weryfikacja krzyżowa całego zestawu danych.

Załóżmy, że zapisaliśmy 20% naszych danych jako zestaw testowy. Następnie bierzemy resztę, dzielimy ją na k fałdy i, korzystając z weryfikacji krzyżowej, znajdujemy model, który najlepiej prognozuje nieznane dane z tego zestawu danych. Powiedzmy, że najlepszy model, który znaleźliśmy, daje nam 75% dokładności.

Różne samouczki i wiele pytań na różnych stronach z pytaniami i odpowiedziami mówią, że teraz możemy zweryfikować nasz model na zapisanym (testowym) zbiorze danych. Ale wciąż nie mogę zrozumieć, jak to dokładnie zostało zrobione, ani jaki jest tego sens.

Powiedzmy, że mamy dokładność 70% w zestawie danych testowych. Co więc robimy dalej? Czy wypróbowujemy inny model, a potem inny, dopóki nie uzyskamy wysokiej oceny w naszym zestawie danych testowych? Ale w tym przypadku wygląda na to, że po prostu znajdziemy model, który pasuje do naszego ograniczonego (tylko 20%) zestawu testowego . Nie oznacza to, że znajdziemy model, który jest ogólnie najlepszy.

Co więcej, jak możemy uznać ten wynik za ogólną ocenę modelu, jeśli jest on obliczany tylko na podstawie ograniczonego zestawu danych? Jeśli ten wynik jest niski, być może mieliśmy pecha i wybraliśmy „złe” dane testowe.

Z drugiej strony, jeśli wykorzystamy wszystkie dane, które mamy, a następnie wybierzmy model przy użyciu k-krotnej walidacji krzyżowej, znajdziemy model, który najlepiej prognozuje nieznane dane z całego zestawu danych .

Serhiy
źródło
1
Oceniasz najlepszy model na tym zestawie testowym i raportujesz na nim wydajność. To twój najlepszy szacunek wydajności twojego modelu. Proponuję przeczytać dwa pierwsze rozdziały doskonałej książki „Uczenie się z danych” Yasera Abu-Mostafy. Bardzo zwięzły i bardzo dostępny. work.caltech.edu/telecourse.html
Vladislavs Dovgalecs
1
Dzięki za książkę, którą zasugerowałeś! Ale jeśli chodzi o twoją odpowiedź na pytanie - mówisz, że jest to „najlepsze oszacowanie wydajności twojego modelu”, ale tak naprawdę jest to oszacowanie wydajności modelu na małym (20%) zestawie testowym , to nie oznacza ogólnie model wydajności.
Serhiy
2
W rzeczywistości jest to najlepsze oszacowanie ogólnej wydajności modelu. Twój model może być stronniczy i / lub może wykazywać dużą wariancję, ale wydajność modelu w zestawie testowym jest najlepszym wskaźnikiem tego, jak działałby na niewidzialnych danych.
Vladislavs Dovgalecs
Dzięki xeon! Jedyne, co wciąż jest dla mnie niejasne, to co robimy po ocenie modelu przy użyciu zestawu danych testowych ?
Serhiy
Możesz wysłać model, jeśli jesteś zadowolony z wyników lub znaleźć lepsze funkcje / algorytm / więcej danych, aby ulepszyć model.
Vladislavs Dovgalecs

Odpowiedzi:

20

Jest to podobne do innego pytania, na które odpowiedziałem w sprawie weryfikacji krzyżowej i zestawów testowych . Kluczową koncepcją do zrozumienia tutaj są niezależne zestawy danych . Rozważ tylko dwa scenariusze:

  1. Jeśli masz dużo zasobów, najlepiej byłoby zebrać jeden zestaw danych i wyszkolić swój model poprzez wzajemną weryfikację. Następnie zebrałbyś inny całkowicie niezależny zestaw danych i przetestowałbyś swój model. Jednak, jak już powiedziałem, dla wielu badaczy zwykle nie jest to możliwe.

Teraz, jeśli jestem badaczem, który nie ma tyle szczęścia, co mam zrobić? Możesz spróbować naśladować dokładnie ten scenariusz:

  1. Przed przystąpieniem do jakiegokolwiek szkolenia modelowego weźmiesz część danych i odłożysz na bok ( nigdy nie dotykaj ich podczas weryfikacji krzyżowej ). Ma to na celu symulację tego samego niezależnego zestawu danych wspomnianego w idealnym scenariuszu powyżej. Mimo że pochodzi z tego samego zestawu danych, szkolenie modelowe nie pobiera żadnych informacji z tych próbek (w przypadku weryfikacji krzyżowej wykorzystywane są wszystkie dane). Po przeszkoleniu modelu zastosujesz go do zestawu testowego , którego nigdy nie było widać podczas treningu, i uzyskasz wyniki. Ma to na celu upewnienie się, że Twój model jest bardziej ogólny i nie tylko się nauczył twoich danych.

Aby rozwiązać pozostałe problemy:

Powiedzmy, że mamy 70% dokładność zestawu danych testowych, więc co dalej? Czy wypróbujemy inny model, a potem inny, dopóki nie uzyskamy wysokiej oceny naszego zestawu danych testowych?

W pewnym sensie chodzi o to, że tworzysz najlepszy model, jaki możesz na podstawie swoich danych, a następnie oceniasz go na kilku innych danych, których nigdy wcześniej nie widział. Możesz ponownie ocenić swój schemat weryfikacji krzyżowej, ale gdy masz już dostrojony model (tj. Hiperparametry), posuwasz się naprzód z tym modelem, ponieważ był on najlepszy, jaki mogłeś zrobić. Kluczem jest NIGDY NIE UŻYWAĆ DANYCH TESTOWYCH DO STROJENIA . Wynik z danych testowych stanowi wydajność modelu w odniesieniu do danych „ogólnych”. Replikacja tego procesu usunęłaby niezależność zestawów danych (co stanowiło cały punkt). Jest to również poruszone w innym pytaniu dotyczącym danych testowych / walidacyjnych .

A także, jak możemy uznać ten wynik za ogólną ocenę modelu, jeśli jest on obliczany na podstawie ograniczonego zestawu danych? Jeśli ten wynik jest niski, być może nie mieliśmy szczęścia wybrać „złych” danych testowych.

Jest to mało prawdopodobne, jeśli poprawnie podzieliłeś swoje dane. Powinieneś rozdzielać swoje dane losowo (chociaż potencjalnie rozwarstwione dla równoważenia klas). Jeśli zestaw danych jest wystarczająco duży, aby podzielić dane na trzy części, podzbiór testowy powinien być na tyle duży, aby szansa na wybranie złych danych była bardzo niska. Bardziej prawdopodobne jest, że Twój model został przeregulowany.

cdeterman
źródło
3
Dziękuję za tak szczegółowe wyjaśnienie! Jedyne, co wciąż jest dla mnie niejasne, to co robimy po ocenie modelu przy użyciu zestawu danych testowych ? Co jeśli wynik jest naprawdę niski? Czy próbujemy innego modelu?
Serhiy
Jak mówię powyżej, możesz ponownie ocenić swoją walidację krzyżową i sprawdzić, czy twoją metodę można ulepszyć, o ile nie wykorzystasz danych „testowych” do szkolenia modeli. Jeśli wynik jest niski, prawdopodobnie przewyższasz model. Twój zestaw danych może mieć tylko tyle mocy predykcyjnej.
cdeterman
Czy krzyżowa walidacja nie jest po prostu wielokrotnym podziałem na zestaw treningowy i testowy (na przykład zestaw testowy to pierwsze 20%, a następnie drugie 20%, a następnie trzecie itd. Lub wszystkie losowo wybierają 20% dla testu n razy i obliczają średnią dokładność) i robisz dokładnie to samo, co opisujesz, robiąc z zestawem testowym? Nie pokazujesz tego algorytmowi do czasu testu?
Zelphir Kaltstahl
2
@ Zelphir nie, każda fałda jest oceniana wiele razy przy każdej kombinacji hiperparametrów. Po prostu wybór najlepszego wyniku może przynieść wyższe wyniki niż w przypadku „niezależnego” zestawu testów. Chodzi o to, aby zobaczyć, które parametry uogólniają się w tych fałdach i użyć tej architektury w zestawie testowym, którego nigdy nie widział, aby określić, jak „uogólniony” jest model.
cdeterman
1
Chcę dodać, że faktyczne sprawdzenie wydajności niezależnego zestawu testowego i podjęcie decyzji o wycofaniu się i ponownym przeszkoleniu modelu powoduje, że zestaw testowy nie jest już całkowicie niezależny . W rzeczywistości możesz to robić nieskończenie wiele razy, aż uzyskasz doskonałą dokładność. W odniesieniu do odniesień akademickich polecam książkę „Uczenie się z danych”, autor ma również bezpłatny kurs online ( work.caltech.edu/telecourse.html ).
Michael
4

Jeśli wszystko, co zamierzasz zrobić, to trenować model z ustawieniami domyślnymi na nieprzetworzonym lub minimalnie wstępnie przetworzonym zestawie danych (np. Jednorazowe kodowanie i / lub usuwanie NA), nie potrzebujesz osobnego zestawu testowego, możesz po prostu trenować na swoim trenuj zestaw i testuj na swoim zestawie walidacyjnym, lub jeszcze lepiej, trenuj na całym zestawie za pomocą walidacji krzyżowej, aby oszacować swoją wydajność.

Jednak gdy tylko twoja wiedza na temat danych spowoduje, że dokonasz zmian w swojej pierwotnej strategii, teraz „zepsułeś” swój wynik. Niektóre przykłady obejmują:

  • Wybór modelu: przetestowałeś maszyny logistyczne, lasso, losowy las, XGBoost i obsługujący wektor i wybrałeś najlepszy model

  • Strojenie parametrów: Dostroiłeś XGBoost, aby znaleźć optymalne hiperparametry

  • Wybór funkcji: Użyłeś selekcji wstecznej, algorytmu genetycznego, boruty itp., Aby wybrać optymalny podzbiór funkcji do uwzględnienia w modelu

  • Brakujące przypisanie: przypisałeś brakujące zmienne średniej lub prostemu modelowi opartemu na innych zmiennych

  • Transformacja cech: wyśrodkowałeś i skalowałeś zmienne numeryczne, zastępując je wynikiem Z (liczba odchyleń standardowych od średniej)

We wszystkich powyższych przypadkach użycie pojedynczego zestawu wstrzymań lub nawet walidacja krzyżowa nie da realistycznego oszacowania rzeczywistej wydajności, ponieważ w swojej decyzji korzystasz z informacji, których nie będziesz mieć na temat przyszłych danych. Zamiast tego wybierasz najlepszy model, najlepsze hiperparametry, najlepszy zestaw funkcji itp. Dla swoich danych i prawdopodobnie nieco „przerastasz” strategię względem danych. Aby uzyskać uczciwe oszacowanie rzeczywistej wydajności, musisz ocenić ją na danych, które w ogóle nie weszły w proces decyzyjny, stąd powszechna praktyka korzystania z niezależnego zestawu testów niezależnego od treningu (modelowania) i walidacji ( wybranie modelu, funkcji, hiperparametrów itp.).

Jako alternatywę dla trzymania zestawu testowego możesz zamiast tego użyć techniki zwanej zagnieżdżoną weryfikacją krzyżową. Wymaga to zakodowania całej strategii modelowania (transformacja, imputacja, wybór funkcji, wybór modelu, strojenie hiperparametrów) jako funkcji nieparametrycznej, a następnie przeprowadzenia weryfikacji krzyżowej dla całej funkcji, tak jakby była to po prostu funkcja dopasowania modelu. Jest to trudne w większości pakietów ML, ale można je dość łatwo wdrożyć w pakiecie R z pakietem mlr, używając opakowań do zdefiniowania strategii treningu, a następnie ponownego próbkowania zapakowanego ucznia:

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html

Aaron Cooley
źródło
1

Zakładam, że dokonujesz klasyfikacji.

Weź swoje dane i podziel je 70/30 na podzbiory trainingData / testData. Weź podzbiór trainingData i ponownie podziel go na 70/30 na podzbiory trainingData / validateData. Teraz masz 3 podzbiory oryginalnych danych - trainingData (.7 * .7), validateData (.7 * .3) i testData (.3).

Trenujesz swój model za pomocą trainingData. Następnie sprawdzasz wydajność tego modelu za pomocą validateData, co możemy uznać za niezależne od trainingData, a zatem dobrą ocenę tego, jak dobrze model się uogólnia. Udawajmy, że osiągasz 75% dokładności.

Teraz przekwalifikowujesz swój model dowolną liczbę razy. Podczas każdego przekwalifikowania oceniasz inny zestaw hiperparametrów (w pierwszej kolejności parametry podawane do modelu w porównaniu z tymi, które optymalizuje Twój model), ale nadal używasz podzestawu trainingData. Przy każdym ponownym szkoleniu ponownie sprawdzasz, jak dobrze nowy model się uogólnia, sprawdzając wydajność na validateData.

Po sprawdzeniu każdej kombinacji hiperparametrów, którą chcesz ocenić, wybierasz zestaw hiperparametrów, który zapewnił Ci najlepszą wydajność w sprawdzaniu poprawności danych - udawajmy, że twoja najlepsza wydajność w sprawdzaniu poprawności wyniosła 80% dokładności. To są twoje ostateczne hiperparametry, a model zdefiniowany przez te hiperparametry jest tym, którego użyjesz w następnym kroku.

Teraz weź model, który używa ostatecznych hiperparametrów i oceń testData. To pierwszy raz, kiedy testData został dotknięty od początku całego procesu! Jeśli uzyskasz wydajność testData, która jest porównywalna z wydajnością na validateData (choć zwykle będzie nieco niższa), możesz mieć pewność, że Twój model działa zgodnie z oczekiwaniami i dobrze się uogólnia! Jeśli tak się stanie, to twój ostateczny model!

Dlaczego to wszystko? Próbujesz uniknąć przeuczenia. Zawsze istnieje ryzyko, że nadmiernie dopasujesz się do danych, których używasz podczas treningu i dostrajania (czyli sprawdzania poprawności) modelu. Jeśli trenujesz, dostrajasz (sprawdzasz) i testujesz przy użyciu tylko jednego zestawu danych, istnieje duża szansa, że ​​dopasujesz te dane i nie uogólni się dobrze. Po rozbiciu zestawów danych treningowych i testowych (i przy założeniu, że dostroisz dane testowe), masz szansę sprawdzić się wewnętrznie, ale nadal istnieje szansa, że ​​po prostu przerastasz dane testowe. Właśnie dlatego wybieramy trzeci zestaw danych, sprawdzamy poprawność, dzięki czemu mamy dodatkową warstwę wewnętrznej uczciwości. Strojenie za pomocą validateData powstrzymuje nas od nadmiernego dopasowania do trainingData. Końcowe testy z testData powstrzymują nas od nadmiernego dopasowania do validateData.

John D.
źródło
Czym różni się ta odpowiedź od odpowiedzi przyjętej ?
Jan Kukacka
Pierwotne pytanie wyraźnie dotyczy przepływu pracy, który nie obejmuje weryfikacji krzyżowej. Przeczytałem jego pytanie, aby zapytać, jak to działa i dlaczego jest wiarygodne. Akceptowana odpowiedź omawia przepływ pracy, który nadal obejmuje weryfikację krzyżową. Chciałem wyjaśnić, jak ludzie to robią, niekoniecznie wykorzystując krzyżową weryfikację, na wypadek, gdyby ktoś był początkującym i być może jeszcze tego nie zrobił. Przepraszam, jeśli publikowanie tego jest nieprawidłowe - Jestem nowym użytkownikiem i nie chcę łamać reguły.
John D
0

Spójrzmy na to w następujący sposób

  1. Powszechna praktyka

    a) Dane treningowe - wykorzystywane do wyboru parametrów modelu.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    b) Dane walidacyjne - wykorzystywane do wyboru hiperparametrów.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) Dane testowe - używane do uzyskania pewności wyniku z powyższych dwóch kroków

    i) Used once a model is completely trained
    
  2. Inny sposób spojrzenia na część 1

    a) Nasza pula modeli kandydatów to zestaw 5-dimensonów, tj.

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    b) Krok 1a zredukuj model kandydatów z 5 wymiarów do 1 wymiarów.

    c) Krok 1b zredukuj kandydatów do modelu z 1-wymiaru do 0-wymiaru, co jest pojedynczym modelem.

    d) Jednak OP może myśleć, że powyższy wynik „końcowy” nie działa wystarczająco dobrze na zbiorze danych testowych, a zatem ponownie wykonaj cały proces, powiedzmy, używając regresji grzbietu zamiast zwykłej regresji liniowej. Następnie zestaw danych testowych jest wykorzystywany wiele razy, a zatem szum w tych danych może powodować pewne niedopasowanie przy podejmowaniu decyzji o zastosowaniu regresji liniowej lub regresji kalenicowej.

    e) Aby poradzić sobie z pulą modeli wielowymiarowych z parametrami, hiperparametrami, typami modeli i metodami wstępnego przetwarzania, każdy podział na dostępne nam dane zasadniczo określa proces decyzyjny, który

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. Wnioski i odpowiedzi na pytanie OP

    a) Dwuczęściowy (szkolenie i test), trójdzielny (szkolenie, sprawdzanie poprawności i testowanie) lub większa liczba podziałów dotyczy zasadniczo zmniejszenia wymiarów i przydzielania danych (zwłaszcza hałasu i ryzyka nadmiernego dopasowania).

    b) Na pewnym etapie możesz wymyślić „ostateczną” pulę kandydatów na model, a następnie zastanowić się, jak zaprojektować proces sekwencyjnego zmniejszania wymiaru w taki sposób, aby

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    c) Co jeśli nie możesz osiągnąć b

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
Królikarnia
źródło