R / caret: pociąg i zestawy testowe a walidacja krzyżowa?

9

To może być głupie pytanie, ale przy generowaniu modelu z karetką i używaniu czegoś podobnego LOOCVlub (nawet bardziej do LGOCVrzeczy ) , jaka jest korzyść z dzielenia danych na zestawy pociągów i testów, jeśli jest to zasadniczo etap weryfikacji krzyżowej w każdym razie?

Przeczytałem niektóre powiązane pytania i zasugerowali, że niektóre metody weryfikacji krzyżowej (np. Opisane tutaj na stronie Caret ) służą do wyboru funkcji . Ale w moim przypadku używam randomForest( method = "rf") i kernlab( method = svmRadial), które nie są wymienione w grupie, która próbuje usunąć predyktory.

Moje pytanie brzmi więc, czy używam czegoś takiego cross_val <- trainControl(method = "LGOCV", p = 0.8), czy to nie to samo, co szkolenie na 80% moich danych, testowanie wynikowego modelu na pozostałych 20% i robienie tego w kółko, aby dowiedzieć się, jak dobrze model działa?

Jeśli tak, to czy istnieje potrzeba dzielenia moich danych na zestawy pociągów / testów?

PS Częściowo pytam, gdy przeprowadzam modele na empirycznie wygenerowanych prototypach DOE (pomyśl o twardych towarach, w których modyfikujemy dane wejściowe, a następnie używam metod testowych do pomiaru różnych atrybutów dotyczących prototypu).

Jako taki, nie mam ogromnego zestawu danych z wieloma nakładającymi się poziomami predyktorów do modelowania - często przeprowadzamy jedną próbę w każdym punkcie zainteresowania DOE, ponieważ generowanie danych jest w tym przypadku kosztowne. Dlatego chciałbym wykorzystać wszystkie dane, jakie mogę, do dokładnego modelu, ale chciałem tutaj sprawdzić, czy nie brakuje mi czegoś oczywistego i zrobienia złego modelu, nie dzieląc rzeczy.


Edycja: W odpowiedzi na pytanie @ topepo modeluję fizycznie zmierzone atrybuty związku w oparciu o dostosowanie chemicznych składników formuły. Nie mogę omówić mojej faktycznej aplikacji, ale stworzę przykład oparty na formułowaniu wewnętrznej farby lateksowej. Prowadzę zaprojektowane eksperymenty, w których mieszamy 4-5 chemikaliów, być może bawimy się% ciałami stałymi i czasem podgrzewania roztworu polimeru w celu dostosowania stopnia polimeryzacji.

Następnie możemy zmierzyć reologię, masę cząsteczkową, twardość powłoki malarskiej, wodoodporność itp.

Mamy przyzwoite repliki kilku zmiennych, ale niewiele prawdziwych replik w tym sensie, że każdy poziom DOE był dokładnie taki sam. Całkowity zestaw danych to ~ 80 obserwacji i może 4-5 to dokładne powtórzenia. Przeprowadziliśmy 15 różnych testów i być może wykonano 5-6 z nich dla każdej pojedynczej obserwacji. Niektóre odpowiedzi dotyczą 25–50% danych.

Odtąd chcielibyśmy modelować wpływ naszych 7 predyktorów na właściwości wyjściowe, a następnie optymalizować, aby kierować reklamy do nowych przestrzeni projektowych, które najprawdopodobniej nadadzą pożądane właściwości.

(Stąd moje pytanie TUTAJ . Gdy już mam wytrenowany model, fajnie byłoby zrobić „odwrócenie” i podać pożądane odpowiedzi, aby uzyskać jak najlepsze przypuszczenie na możliwych poziomach wejściowych, aby spróbować dalej).

Hendy
źródło
Zestaw walidacyjny i zestaw testowy to dwie różne rzeczy! Zobacz stats.stackexchange.com/questions/19048/... i en.wikipedia.org/wiki/Test_set
sashkello,
@sashkello Dzięki za to. Prawdopodobnie można to zamknąć jako duplikat i jakoś całkowicie mi tego brakowało. Jednym brakującym bitem może być: Jeśli trenuję data_set1, co uważam za krok wykonywany przez LGOCVweryfikację krzyżową? Z mojego czytania zakładam, że 1) caretiteruje poprzez dostrajanie parametrów, data_set1a następnie 2) utrzymuje te parametry jako stałe, a 3) tworzy „podmodel” przy użyciu parametrów z nr 1 dla każdej p = 0.8próbki data_set1i testuje prognozy dla pozostałych 0,2 do dokładności pomiaru . Czy to rozsądne podsumowanie?
Hendy,
Jeszcze jeden brakujący bit: czy pominięcie zestawu do testowania w ogóle pomaga w dokładności modelu? Wygląda na to, że daje bezstronny zestaw do przyszłych testów. Jeśli dane są ograniczone i nie ma zbyt wielu nakładających się punktów projektowych, czy nie powinienem lepiej trenować z pełnym zestawem i polegać na weryfikacji krzyżowej w celu oszacowania dokładności?
Hendy,
Przy lepszej strategii wyszukiwania jest to bardzo pomocne: stats.stackexchange.com/questions/9357/… . W szczególności to „Sądzę, że jednym z czynników ograniczających jest tutaj ilość danych. W większości przypadków nie chcemy nawet dzielić danych na stałe partycje, stąd CV”. Myślę, że trafia to na moje pytanie (które jest prawdopodobnie związane z ograniczonym charakterem moich danych (tylko 80 obserwacji). Wydaje się, że jest to głosowanie za brakiem podziału w tych przypadkach?
Hendy,

Odpowiedzi:

7

Moje ogólne przemyślenia:

Więc kiedy oceniasz różne modele, możesz je dostroić, wypróbować różne rodzaje wstępnego przetwarzania itp., Aż znajdziesz to, co uważasz za dobry model. Ponowne próbkowanie może pomóc we właściwym kierunku podczas tego procesu.

Nadal jednak istnieje szansa na nadmierne dopasowanie, a na prawdopodobieństwo wystąpienia tego zdarzenia duży wpływ ma ilość posiadanych danych (i predyktorów). Jeśli masz trochę danych, możesz o tym pomyśleć na kilka sposobów:

  • Wykorzystaj wszystkie dane do treningu, ponieważ każdy punkt danych znacznie zwiększa wydajność modelu.
  • Odłóż na bok niewielki zestaw testowy jako ostateczną kontrolę pod kątem rażących błędów spowodowanych nadmiernym dopasowaniem. Szanse na nadmierne dopasowanie przy małych próbkach nie są małe i stają się większe wraz z liczbą próbek.

Wpadłem do drugiego obozu, ale pierwszy wcale nie jest zły.

Jeśli masz mnóstwo danych, to tak naprawdę nie ma to większego znaczenia (chyba że masz małą częstotliwość zdarzeń).

Dla Was:

Masz DOE. Rodzaj projektu pomógłby odpowiedzieć na pytanie. Czy próbujesz interpolować między punktami projektowymi lub przewidywać punkty projektowe, które do tej pory nie były testowane?

Masz jedną replikę. Upadłem, jak losowy las uderza młotem w sanie i może doprowadzić do nadmiernego dopasowania. Spróbowałbym czegoś płynniejszego, jak SVM lub (nerwowa) sieć neuronowa.

Max

topepo
źródło
Dodałem aktualizację dla ciebie powyżej. Miałem całkiem fajne krzywe (chyba subiektywne) z method = "svmRadial". Mam nadzieję method = neuralnet, że ocenię kilka innych, w tym chociaż w poprzednich próbach sieć neuronowa była bardzo wrażliwa na `set.seed (). Krótko mówiąc, staramy się: 1) lepiej zrozumieć związek między danymi wejściowymi / wielokrotnymi odpowiedziami i 2) dokonać dokładnych domysłów w najbardziej prawdopodobnej przestrzeni projektowej, aby uzyskać pożądane właściwości, abyśmy mogli uruchomić nowe, bardziej ukierunkowane DOE w porównaniu z bardziej typowymi podejście ekspansywne / shotgun pod względem poziomów wejściowych min / maks. do wypróbowania.
Hendy