Załóżmy, że mamy kogoś, kto buduje model predykcyjny, ale ten ktoś niekoniecznie jest dobrze obeznany z właściwymi zasadami statystyki lub uczenia maszynowego. Może pomagamy tej osobie w trakcie nauki, a może ta osoba korzysta z pakietu oprogramowania, który wymaga minimalnej wiedzy.
Teraz ta osoba może bardzo dobrze rozpoznać, że prawdziwy test pochodzi z dokładności (lub jakiejkolwiek innej miary) danych spoza próby . Obawiam się jednak, że istnieje wiele subtelności, o które należy się martwić. W prostym przypadku budują swój model i oceniają go na podstawie danych szkoleniowych oraz oceniają na podstawie danych testowych. Niestety czasami może być zbyt łatwo wrócić i poprawić parametry modelowania i sprawdzić wyniki na tych samych „testujących” danych. W tym momencie dane te nie są już prawdziwymi danymi pozapróbowymi, a nadmierne dopasowanie może stać się problemem.
Jednym potencjalnym sposobem rozwiązania tego problemu byłoby zasugerowanie utworzenia wielu zestawów danych spoza próby, tak aby każdy zestaw danych testowych mógł zostać odrzucony po użyciu i w ogóle nie może być ponownie użyty. Wymaga to jednak dużego zarządzania danymi, zwłaszcza że dzielenie musi być wykonane przed analizą (więc trzeba wcześniej wiedzieć, ile podziałów).
Być może bardziej konwencjonalnym podejściem jest k-krotna walidacja krzyżowa. Jednak w pewnym sensie traci to rozróżnienie między zestawem danych „szkoleniowych” i „testujących”, które moim zdaniem mogą być przydatne, szczególnie dla osób, które wciąż się uczą. Nie jestem też przekonany, czy ma to sens dla wszystkich typów modeli predykcyjnych.
Czy istnieje jakiś sposób, który przeoczyłem, aby pomóc w rozwiązaniu problemu nadmiernego dopasowania i testowania wycieków, a jednocześnie pozostawać nieco jasnym dla niedoświadczonego użytkownika?
źródło
Odpowiedzi:
Masz rację, jest to poważny problem w uczeniu maszynowym / modelowaniu statystycznym. Zasadniczo jedynym sposobem, aby naprawdę rozwiązać ten problem, jest zachowanie niezależnego zestawu testów i trzymanie go do momentu ukończenia badania i wykorzystanie go do ostatecznej weryfikacji.
Jednak nieuchronnie ludzie spojrzą na wyniki zestawu testowego, a następnie odpowiednio zmienią swój model; jednak niekoniecznie spowoduje to poprawę wydajności uogólnienia, ponieważ różnica w wydajności różnych modeli może być w dużej mierze spowodowana konkretną próbką danych testowych, którą mamy. W tym przypadku dokonując wyboru, skutecznie przepełniamy błąd testu.
Aby to ograniczyć, należy zminimalizować wariancję błędu testowego (tj. Zmienność błędu testowego zobaczylibyśmy, gdybyśmy użyli różnych próbek danych jako zestawu testowego, pochodzących z tego samego podstawowego rozkładu). Można to najłatwiej osiągnąć za pomocą dużego zestawu testowego, jeśli jest to możliwe, lub np. Ładowania początkowego lub weryfikacji krzyżowej, jeśli nie ma zbyt wielu danych.
Przekonałem się, że tego rodzaju nadmierne dopasowanie w wyborze modelu jest o wiele bardziej kłopotliwe niż się powszechnie ocenia, szczególnie w odniesieniu do oceny wydajności, patrz
GC Cawley i NLC Talbot, Nadmierne dopasowanie w wyborze modelu i późniejsze odchylenie wyboru w ocenie wydajności, Journal of Machine Learning Research, 2010. Research, vol. 11, s. 2079–2107, lipiec 2010 r. (Www)
Tego rodzaju problem wpływa szczególnie na wykorzystanie zestawów danych wzorcowych, które były wykorzystywane w wielu badaniach, a wyniki każdego z wcześniejszych badań domyślnie wpływają na każde nowe badanie, więc obserwowane wyniki prawdopodobnie będą nadmiernie optymistycznym oszacowaniem prawdziwej wykonanie metody. Staram się to obejść, patrząc na wiele zestawów danych (więc metoda nie jest dostosowana do jednego określonego zestawu danych), a także używam wielu losowych podziałów test / trening do oszacowania wydajności (w celu zmniejszenia wariancji oszacowania). Jednak wyniki wciąż wymagają ostrzeżenia, że te standardy były nadmiernie dopasowane.
Innym przykładem, w którym ma to miejsce, są konkursy uczenia maszynowego z tablicą wyników opartą na zestawie walidacyjnym. Nieuchronnie niektórzy zawodnicy majstrują przy swoim modelu, aby awansować na liderów, ale potem kończą się w końcowym rankingu. Powodem tego jest to, że ich wielokrotne wybory przerosły zestaw walidacyjny (skutecznie ucząc się losowych zmian w małym zestawie walidacyjnym).
Jeśli nie możesz utrzymać statystycznie czystego zestawu testowego, obawiam się, że dwie najlepsze opcje to (i) zebranie nowych danych w celu stworzenia nowego statystycznie czystego zestawu testowego lub (ii) zastrzeżenie, że nowy model był oparty na podstawie wyboru dokonanego po zaobserwowaniu błędu zestawu testów, więc oszacowanie wydajności może mieć optymistyczne nastawienie.
źródło
Jednym ze sposobów zapewnienia tego jest upewnienie się, że wszystko, co robisz, aby dopasować się do modelu, zostało zakodowane , nawet „majsterkowanie”. W ten sposób, gdy uruchamiasz proces wielokrotnie, powiedzmy przez cross-validation, zachowujesz spójność między przebiegami. Zapewnia to, że wszystkie potencjalne źródła zmienności są przechwytywane przez proces weryfikacji krzyżowej.
Inną niezwykle ważną rzeczą jest zapewnienie reprezentatywnej próbki w obu zestawach danych. Jeśli Twój zestaw danych nie jest reprezentatywny dla rodzaju danych, których spodziewasz się użyć do przewidywania, to niewiele możesz zrobić. Całe modelowanie opiera się na założeniu, że „indukcja” działa - rzeczy, których nie zaobserwowaliśmy, zachowują się jak rzeczy, które zaobserwowaliśmy.
Zasadniczo trzymaj się z dala od procedur dopasowywania złożonego modelu, chyba że (i) wiesz, co robisz, oraz (ii) wypróbowałeś prostsze metody i okazało się, że nie działają, oraz w jaki sposób metoda złożona naprawia problemy z prostą metodą. „Prosty” i „złożony” oznacza w znaczeniu „prosty” lub „złożony” dla osoby wykonującej dopasowanie. Powodem, dla którego jest to tak ważne, jest to, że pozwala ci zastosować to, co lubię nazywać „testem powąchania” do wyników. Czy wynik wygląda dobrze? Nie możesz „powąchać” wyników z procedury, której nie rozumiesz.
UWAGA: następna, dość długa część mojej odpowiedzi oparta jest na moim doświadczeniu, które znajduje się w obszarze , przy czym może być duże. Jestem prawie pewien, że to, co następuje poniżej nie stosuje się do lub przypadkachN>>p p N≈p N<p
Gdy masz dużą próbkę, różnica między użyciem a niewykorzystaniem danej obserwacji jest bardzo mała, pod warunkiem, że twoje modelowanie nie jest zbyt „lokalne”. Wynika to z faktu, że wpływ danego punktu danych jest generalnie rzędu . Tak więc w dużych zestawach danych, resztki, które otrzymujesz z „trzymania” zestawu danych testowych, są w zasadzie takie same jak resztki, które otrzymujesz z używania go w zestawie danych treningowych. Możesz to pokazać za pomocą zwykłych najmniejszych kwadratów. Resztka uzyskana z wykluczenia tej obserwacji (tj. Jaki byłby błąd zestawu testowego, gdybyśmy umieścili obserwację w zestawie testowym), to , gdzie jest pozostałym treningiem, a1N i etesti=(1−hii)−1etraini etraini hii jest dźwignią tego punktu danych. Teraz mamy , gdzie jest liczbą zmiennych w regresji. Teraz, jeśli , to jest bardzo trudne, aby jakikolwiek był wystarczająco duży, aby wprowadzić znaczącą różnicę między błędami zestawu testowego i zestawu treningowego. Możemy wziąć uproszczony przykład, załóżmy, że (przecięcie i zmienna), macierz obliczeniowa to (zarówno zestawy treningowe, jak i testowe), a dźwignia wynosii ∑ihii=p p N>>p hii p=2 1 N×p X
Gdzie , , a . Wreszcie, jest znormalizowaną zmienną predykcyjną i mierzy, ile standardowych odchyleń jest od średniej. Wiemy więc od początku, że błąd zestawu testowego będzie znacznie większy niż błąd zestawu treningowego dla obserwacji „na krawędzi” zestawu treningowego. Ale to w zasadzie znowu ten reprezentatywny problem - obserwacje „na brzegu” są mniej reprezentatywne niż obserwacje „na środku”. Dodatkowo jest to zamówienie . Więc jeśli masz obserwacji, nawet jeślix¯¯¯=N−1∑ixi x2¯¯¯¯¯=N−1∑ix2i s2x=x2¯¯¯¯¯−x¯¯¯2 x~i=xi−x¯¯¯sx xi 1N 100 x~i=5 (wartość odstająca w przestrzeni x według większości definicji), oznacza to , a błąd testu jest zaniżony . Jeśli masz duży zestaw danych, powiedzmy , jest on jeszcze mniejszy, , czyli mniej niż . W rzeczywistości dla obserwacji wymagałabyś obserwacji w celu dokonania niedoszacowania błędu zestawu testowego przy użyciu błędu zestawu szkoleniowego.hii=26100 1−26100=74100 10000 1−2610000 1% 10000 x~=50 25%
Tak więc w przypadku dużych zbiorów danych użycie zestawu testowego jest nie tylko nieefektywne, ale także niepotrzebne, o ile . Dotyczy to OLS, a także w przybliżeniu dotyczy GLM (szczegóły są różne dla GLM, ale ogólny wniosek jest taki sam). W więcej niż wymiarach „wartości odstające” są zdefiniowane przez obserwacje z dużymi wynikami „głównego składnika”. Można to pokazać pisząc Gdzie jest (ortogonalną) macierzą wektorów własnych dla , z macierzą wartości własnych . Otrzymujemy gdzieN>>p 2 hii=xTiEET(XTX)−1EETxi E XTX Λ hii=zTiΛ−1zi=∑pj=1z2jiΛjj zi=ETxi jest główną oceną składową .xi
Jeśli Twój zestaw testowy ma obserwacji, otrzymasz wersję macierzową , gdzie i to rzędy macierzy projektowej w zestawie testowym. Tak więc w przypadku regresji OLS wiesz już, jakie byłyby błędy „zestawu testowego” dla wszystkich możliwych podziałów danych na zestawy szkoleniowe i testowe. W tym przypadku ( ) nie ma potrzeby dzielenia danych. Możesz zgłosić błędy zestawu testowego „najlepszy przypadek” i „najgorszy przypadek” niemal dowolnego rozmiaru bez faktycznego podziału danych. Pozwala to zaoszczędzić dużo czasu i zasobów komputera.k etest{k}=(Ik−H{k})−1etrain{k} H{k}=X{k}(XTX)−1XT{k} X{k} N>>p
Zasadniczo wszystko to sprowadza się do użycia kary umownej, aby uwzględnić różnicę między błędami szkolenia i testów, takimi jak BIC lub AIC. Skutecznie osiąga ten sam wynik, co przy użyciu zestawu testowego, jednak nie musisz wyrzucać potencjalnie użytecznych informacji. Za pomocą BIC przybliżasz dowody dla modelu, który wygląda matematycznie:
Zauważ, że w tej procedurze nie możemy oszacować żadnych parametrów wewnętrznych - każdy model musi być w pełni określony lub mieć zintegrowane parametry wewnętrzne. Możemy jednak sprawić, że będzie to wyglądać jak krzyżowa walidacja (przy użyciu określonej funkcji utraty) poprzez wielokrotne stosowanie reguły produktu, a następnie rejestrowanie wyniku:Mi
Sugeruje to formę krzyżowej walidacji, ale w przypadku gdy zestaw treningowy jest stale aktualizowany, jedna obserwacja na raz z zestawu testowego - podobnie jak filtr Kalmana. Przewidujemy kolejną obserwację z zestawu testowego przy użyciu bieżącego zestawu treningowego, mierzymy odchylenie od obserwowanej wartości przy użyciu warunkowego prawdopodobieństwa log, a następnie aktualizujemy zestaw treningowy, aby uwzględnić nową obserwację. Należy jednak pamiętać, że ta procedura w pełni przetwarza wszystkie dostępne dane, jednocześnie upewniając się, że każda obserwacja jest testowana jako przypadek „poza próbą”. Jest również niezmienny, ponieważ nie ma znaczenia, co nazywacie „obserwacją 1” lub „obserwacją 10”; wynik jest taki sam (obliczenia mogą być łatwiejsze dla niektórych permutacji niż innych). Funkcja straty jest również „adaptacyjna”, jeśli zdefiniujemy L i iLi=log[p(yi|y1…yi−1MiI)] , to ostrość zależy od , ponieważ funkcja utraty jest stale aktualizowana o nowe dane.Li i
Sugerowałbym, że ocena modeli predykcyjnych w ten sposób działałaby całkiem dobrze.
źródło
Sądzę, że jedynym sposobem na zagwarantowanie tego jest to, że ktoś inny ma dane testowe . W relacjach klient-konsultant można to dość łatwo zarządzać: klient udostępnia konsultantowi zestaw szkoleniowy, na którym zbudowane są modele, aw ramach tego zestawu szkoleniowego konsultant może dzielić dane w dowolny sposób niezbędny, aby zapewnić, że nadmierne dopasowanie nie spowoduje pojawić się; następnie modele są zwracane klientowi do wykorzystania w danych testowych.
Dla indywidualnego badacza oczywiste jest, że najlepszą praktyką byłoby naśladowanie tego zestawu. Oznaczałoby to wydzielenie części danych do przetestowania po dokonaniu wyboru wszystkich modeli. Niestety, jak mówisz, wielu ludzi tego nie ćwiczy, a nawet ludziom, którzy powinni wiedzieć lepiej!
Jednak ostatecznie zależy to od tego, do czego model jest używany. Jeśli kiedykolwiek interesuje Cię przewidywanie tylko tego pojedynczego zestawu danych, to może możesz dopasować wszystko, co lubisz? Jeśli jednak próbujesz wypromować swój model jako taki, który dobrze się uogólnia lub zastosujesz go w jakiejś aplikacji w świecie rzeczywistym, to oczywiście ma to ogromne znaczenie.
Jest to kwestia, która strona pomyślałem, że powinienem wspomnieć, którym jest to, że nawet jeśli się wszystkie procedury prawidłowo, nadal można skończyć z modeli, które są overfitted, ze względu na danych nie jest prawdziwie IID . Na przykład, jeśli dane zawierają korelacje czasowe, to jeśli weźmiesz wszystkie dane treningowe z czasów 1-3 i przetestujesz w czasie 4, może się okazać, że błąd prognozowania jest większy niż oczekiwano. Alternatywnie mogą istnieć artefakty specyficzne dla eksperymentu, takie jak używane urządzenie pomiarowe lub pula osobników w eksperymentach na ludziach, które powodują, że uogólnienie modeli jest gorsze niż oczekiwano.
źródło
view
odpowiednie ustawienia uprawnień do bazy danych, w przypadku gdy niektóre zespoły mają dostęp do danych testowych, a inne są ślepe na dane testowe.To bardzo dobre pytanie i bardzo subtelny problem. Oczywiście są błędy o złych intencjach, które pochodzą od kogoś, kto próbuje cię oszukać. Ale istnieje głębsze pytanie, jak uniknąć przypadkowego wycieku i uniknąć uczciwych błędów.
Pozwól mi wymienić kilka dobrych praktyk operacyjnych. Wszystkie wynikają z uczciwych błędów, które popełniłem w pewnym momencie:
źródło
Wiele ważnych punktów zostało omówionych w doskonałych odpowiedziach, które już zostały podane.
Ostatnio opracowałem osobistą listę kontrolną dla statystycznej niezależności danych testowych:
Istnieje inny szczególny rodzaj wycieku danych w mojej dziedzinie: wykonujemy przestrzennie spektroskopię tkanek biologicznych. Referencyjne oznaczanie widm testowych musi być zaślepione w stosunku do informacji spektroskopowych, nawet jeśli kuszące jest zastosowanie analizy skupień, a następnie po prostu dowiedz się, do której klasy należy każdy skupisko (byłyby to częściowo nadzorowane dane testowe, które nie są w ogóle niezależny).
Na koniec, ale na pewno nie najmniej ważne: podczas kodowania sprawdzania poprawności ponownego próbkowania faktycznie sprawdzam, czy obliczone wskaźniki w zbiorze danych nie prowadzą do pobrania wierszy testowych od szkolenia pacjentów, dni itp.
Należy zauważyć, że „podział nie został wykonany w celu zapewnienia niezależności” i „podział przed wystąpieniem jakichkolwiek obliczeń obejmujących więcej niż jeden przypadek” może również wystąpić w przypadku testów, które twierdzą, że używają niezależnego zestawu testów, a ten drugi nawet, jeśli analityk danych jest ślepy na odniesienia do przypadków testowych. Te błędy nie mogą się zdarzyć, jeśli dane testowe zostaną wstrzymane do momentu przedstawienia ostatecznego modelu.
* Używam pacjentów jako najwyższej hierarchii danych tylko ze względu na łatwość opisu.
** Jestem chemikiem analitycznym: znoszenie instrumentów jest znanym problemem. W rzeczywistości częścią walidacji metod analizy chemicznej jest ustalenie, jak często kalibracje muszą być sprawdzane w stosunku do próbek walidacyjnych i jak często kalibracja musi być powtarzana.
FWIW: W praktyce zajmuję się aplikacjami gdzie
Osobiście nie spotkałem się jeszcze z aplikacją, w której do opracowania klasyfikatora dostaję wystarczającą liczbę niezależnych przypadków, aby umożliwić odłożenie odpowiedniego niezależnego zestawu testów. Doszedłem zatem do wniosku, że właściwie wykonana walidacja ponownego próbkowania jest lepszą alternatywą, gdy metoda jest wciąż w fazie rozwoju. W końcu trzeba będzie przeprowadzić odpowiednie badania walidacyjne, ale robi to ogromne marnotrawstwo zasobów (lub wyniki nie przyniosą żadnych użytecznych informacji z powodu wariancji), podczas gdy opracowywanie metod jest na etapie, w którym wszystko wciąż się zmienia.
źródło
Jeśli dobrze pamiętam, niektóre konkursy prognostyczne (takie jak Netflix lub te na Kaggle) używają tego schematu:
Istnieje zestaw szkoleniowy z „odpowiedziami”. Istnieje zestaw testowy nr 1, na który badacz udziela odpowiedzi. Badacz sprawdza ich wynik. Istnieje zestaw testów nr 2, na które badacz udziela odpowiedzi, ALE badacz nie sprawdza ich wyniku. Badacz nie wie, które przypadki przewidywania znajdują się w punktach 1 i 2.
W pewnym momencie zestaw nr 2 musi stać się widoczny, ale przynajmniej ograniczyłeś zanieczyszczenie.
źródło
W niektórych przypadkach, takich jak predyktory oparte na sekwencji biologicznej, nie wystarczy zapewnić, że przypadki nie pojawią się w więcej niż jednym zestawie. Nadal musisz się martwić o zależność między zestawami.
Na przykład w przypadku predyktorów opartych na sekwencjach należy usunąć nadmiarowość, upewniając się, że sekwencje w różnych zestawach (w tym w różnych zestawach walidacji krzyżowej) nie mają wysokiego poziomu podobieństwa sekwencji.
źródło
Powiedziałbym, że „k-fold cross validation” jest właściwą odpowiedzią z teoretycznego punktu widzenia, ale twoje pytanie wydaje się bardziej na temat organizacji i nauczania, więc odpowiem inaczej.
Gdy ludzie „wciąż się uczą”, często myśli się, jakby uczyli się, jak „szybko i bezproblemowo” stosować algorytmy i całą „dodatkową” wiedzę (motywacja problemu, przygotowanie zestawu danych, walidacja, analiza błędów, praktyczne błędy itp. ) zostanie nauczony „później”, gdy będą „lepiej przygotowani”.
To jest całkowicie błędne.
Jeśli chcemy, aby uczeń lub ktokolwiek zrozumiał różnicę między zestawem testowym a zestawem treningowym, najgorsze będzie przekazanie tych dwóch zestawów dwóm różnym facetom, jakbyśmy myśleli, że „na tym etapie” „dodatkowa wiedza” jest szkodliwy. To jest jak podejście oparte na wodospadzie w rozwoju oprogramowania - kilka miesięcy czystego projektowania, potem kilka miesięcy czystego kodowania, następnie kilka miesięcy czystych testów i szkoda, że w końcu wynik.
Nauka nie powinna iść jak wodospad. Wszystkie części uczenia się - motywacja problemu, algorytm, praktyczne rozwiązania, ocena wyników - muszą się łączyć, małymi krokami. (Podobnie jak zwinne podejście w tworzeniu oprogramowania).
Być może wszyscy tutaj przeszli przez stronę ml-class.org Andrew Nga - podałbym jego kurs jako przykład solidnego „zwinnego” stylu uczenia się - takiego, który nigdy nie dałby pytania „jak upewnij się, że dane testowe nie przeciekają do danych treningowych ”.
Pamiętaj, że mogłem całkowicie nie zrozumieć twojego pytania, więc przepraszam! :)
źródło