Ostatnio dużo czytałem na tej stronie (@Aniko, @Dikran Marsupial, @Erik) i gdzie indziej na temat problemu nadmiaru występującego przy krzyżowej walidacji - (Smialowski i in. 2010 Bioinformatics, Hastie, Elementy uczenia statystycznego). Sugeruje się, że każdy nadzorowany wybór funkcji (przy użyciu korelacji z etykietami klas) wykonywany poza oszacowaniem wydajności modelu za pomocą walidacji krzyżowej (lub innej metody szacowania modelu, takiej jak ładowanie początkowe) może spowodować przeregulowanie.
Wydaje mi się to nieintuicyjne - na pewno, jeśli wybierzesz zestaw funkcji, a następnie ocenisz model przy użyciu tylko wybranych funkcji za pomocą weryfikacji krzyżowej, wówczas otrzymujesz obiektywne oszacowanie ogólnej wydajności modelu w odniesieniu do tych funkcji (zakłada to, że badana próbka jest reprezentatywna ludności)?
Dzięki tej procedurze nie można oczywiście twierdzić, że zestaw funkcji jest optymalny, ale czy można zgłosić wydajność wybranego zestawu funkcji na niewidzialnych danych jako prawidłową?
Zgadzam się z tym, że wybór funkcji na podstawie całego zestawu danych może spowodować wyciek danych między zestawem testowym a zestawem pociągów. Ale jeśli zestaw funkcji jest statyczny po początkowym wyborze i nie jest wykonywane żadne inne dostrojenie, to z pewnością poprawne jest raportowanie wskaźników wydajności zweryfikowanych krzyżowo?
W moim przypadku mam 56 funkcji i 259 skrzynek, więc # skrzynki> # cechy. Funkcje pochodzą z danych czujnika.
Przepraszam, jeśli moje pytanie wydaje się pochodne, ale wydaje się to istotną kwestią do wyjaśnienia.
Edycja: po wdrożeniu wyboru funkcji w ramach weryfikacji krzyżowej na zestawie danych wyszczególnionym powyżej (dzięki odpowiedziom poniżej), mogę potwierdzić, że wybór funkcji przed weryfikacją krzyżową w tym zestawie danych wprowadził znaczącystronniczość. To uprzedzenie / nadmierne dopasowanie było największe, gdy robiono to dla preparatu 3-klasowego, w porównaniu do preparatu 2-klasowego. Myślę, że fakt, że użyłem regresji krokowej do wyboru funkcji, wzmógł to przeregulowanie; dla celów porównawczych na innym, ale powiązanym zbiorze danych porównałem sekwencyjną procedurę wybierania cech do przodu wykonaną przed weryfikacją krzyżową z wynikami, które wcześniej uzyskałem z wyborem cech w CV. Wyniki między obiema metodami nie różniły się drastycznie. Może to oznaczać, że regresja krokowa jest bardziej podatna na nadmierne dopasowanie niż sekwencyjny FS lub może być dziwactwem tego zestawu danych.
źródło
Odpowiedzi:
Jeśli dokonasz wyboru funkcji na wszystkich danych, a następnie zweryfikujesz krzyżowo, wtedy dane testowe w każdym folderze procedury krzyżowej weryfikacji zostaną również użyte do wybrania funkcji i to właśnie wpływa na analizę wydajności.
Rozważ ten przykład. Generujemy niektóre dane docelowe, przerzucając monetę 10 razy i rejestrując, czy spadają jako główki czy reszki. Następnie generujemy 20 funkcji, przewracając monetę 10 razy dla każdej funkcji i zapisujemy, co otrzymujemy. Następnie dokonujemy wyboru funkcji, wybierając funkcję, która najlepiej odpowiada docelowym danym i wykorzystujemy ją jako naszą prognozę. Jeśli następnie przeprowadzimy walidację krzyżową, otrzymamy oczekiwany poziom błędu nieco niższy niż 0,5. Wynika to z faktu, że wybraliśmy tę funkcję na podstawie korelacji zarówno z zestawem treningowym, jak i zestawem testowym w każdym folderze procedury walidacji krzyżowej. Jednak prawdziwy poziom błędu wyniesie 0,5, ponieważ dane docelowe są po prostu losowe. Jeśli wybierzesz funkcję niezależnie w ramach każdego krotności weryfikacji krzyżowej, oczekiwana wartość wskaźnika błędów wynosi 0.
Kluczową ideą jest to, że walidacja krzyżowa jest sposobem oszacowania wydajności uogólnienia procesu budowania modelu, dlatego należy powtarzać cały proces w każdym folderze. W przeciwnym razie skończysz z tendencyjnym oszacowaniem lub niedoszacowaniem wariancji oszacowania (lub obu).
HTH
Oto kod MATLAB, który wykonuje symulację Monte-Carlo tego zestawu, z 56 funkcjami i 259 przypadkami, aby pasować do twojego przykładu, dane wyjściowe są następujące:
Pobierany estymator: erate = 0,429210 (0,397683 - 0,451737)
Bezstronny estymator: erate = 0,499689 (0,397683 - 0,590734)
Bieżący estymator to taki, w którym selekcja cech jest przeprowadzana przed walidacją krzyżową, bezstronny estymator to taki, w którym selekcja cech jest przeprowadzana niezależnie w każdym krotności walidacji krzyżowej. Sugeruje to, że uprzedzenie może być w tym przypadku dość poważne, w zależności od charakteru zadania uczenia się.
źródło
Aby dodać nieco inny i bardziej ogólny opis problemu:
Jeśli wykonujesz jakiekolwiek wstępne przetwarzanie danych , np
i chcesz użyć walidacji krzyżowej / out-of-bootstrap (/ hold out) w celu oszacowania wydajności ostatecznego modelu, oparte na danych wstępne przetwarzanie musi zostać wykonane na danych szkoleniowych zastępczych, tj. osobno dla każdego modelu zastępczego.
Jeżeli wstępne przetwarzanie oparte na danych jest typu 1., prowadzi to do „podwójnej” lub „zagnieżdżonej” krzyżowej walidacji: estymacja parametru jest wykonywana w krzyżowej walidacji przy użyciu tylko zestawu szkoleniowego „zewnętrznej” walidacji krzyżowej. ElemStatLearn ma ilustrację ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf strona 222 wydruku 5).
Można powiedzieć, że wstępne przetwarzanie jest tak naprawdę częścią budowy modelu. wykonywane jest tylko wstępne przetwarzanie
można wyjąć z pętli sprawdzania poprawności, aby zapisać obliczenia.
I na odwrót: jeśli Twój model jest całkowicie zbudowany na podstawie wiedzy zewnętrznej dla określonego zbioru danych (np. Na podstawie wcześniejszej wiedzy eksperta decydujesz, że kanały pomiarowe 63–79 nie mogą pomóc w rozwiązaniu problemu, możesz oczywiście wykluczyć te kanały , zbuduj model i zweryfikuj go krzyżowo. To samo, jeśli wykonasz regresję PLS i na podstawie własnego doświadczenia zdecydujesz, że 3 ukryte zmienne są rozsądnym wyborem (ale nie baw się, czy 2 lub 5 lv dają lepsze wyniki), możesz kontynuuj normalną walidację poza bootstrap / cross.
źródło
Spróbujmy uczynić to nieco intuicyjnym. Rozważ ten przykład: masz binarne zależne i dwa binarne predyktory. Chcesz model z tylko jednym predyktorem. Oba predyktory mają szansę powiedzieć, że 95% jest równe zależnej, a szansa 5% nie zgadzać się z zależną.
Teraz, przypadkowo na twoich danych, jeden predyktor jest zależny od całych danych w 97% przypadków, a drugi tylko w 93% przypadków. Wybierz predyktor z 97% i zbuduj swoje modele. W każdym folderze walidacji krzyżowej model będzie zależny od predyktora, ponieważ prawie zawsze ma on rację. Dzięki temu uzyskasz 97% przewidywaną wydajność.
Teraz możesz powiedzieć, ok, to po prostu pech. Ale jeśli predyktory są skonstruowane jak powyżej, masz szansę 75%, że co najmniej jeden z nich ma dokładność> 95% na całym zbiorze danych i to właśnie wybierzesz. Masz więc 75% szansy na przeszacowanie wydajności.
W praktyce oszacowanie efektu wcale nie jest trywialne. Jest całkowicie możliwe, że wybór funkcji wybierze te same funkcje w każdym folderze, tak jakbyś zrobił to w całym zestawie danych, a wtedy nie będzie stronniczości. Efekt staje się również mniejszy, jeśli masz dużo więcej próbek, ale funkcji. Korzystne może być użycie obu danych w obu kierunkach i sprawdzenie, jak różnią się wyniki.
Możesz także odłożyć na bok pewną ilość danych (powiedzmy 20%), użyć zarówno swojej, jak i prawidłowej metody, aby uzyskać oszacowania wydajności poprzez wzajemne sprawdzanie poprawności na 80% i zobaczyć, która prognoza wydajności okaże się bardziej dokładna po przeniesieniu modelu do 20 % odłożonych danych. Pamiętaj, że aby to zadziałało, wybór funkcji przed CV będzie musiał zostać dokonany tylko na 80% danych. W przeciwnym razie nie będzie symulować przeniesienia modelu do danych poza próbką.
źródło