Czy wyboru funkcji należy dokonywać tylko na danych treningowych (lub wszystkich danych)?


10

Czy wybór funkcji powinien być wykonywany tylko na danych treningowych (lub wszystkich danych)? Przeszedłem kilka dyskusji i artykułów, takich jak Guyon (2003) i Singhi i Liu (2006) , ale wciąż nie jestem pewien, czy odpowiedź jest prawidłowa.

Moja konfiguracja eksperymentu wygląda następująco:

  • Zestaw danych: 50 zdrowych kontroli i 50 pacjentów z chorobą (około 200 cech, które mogą być istotne dla prognozowania choroby).
  • Zadanie polega na zdiagnozowaniu choroby na podstawie dostępnych funkcji.

To co robię jest

  1. Weź cały zestaw danych i dokonaj wyboru funkcji (FS). Zachowuję tylko wybrane funkcje do dalszego przetwarzania
  2. Podziel, aby przetestować i trenować, klasyfikator pociągów z wykorzystaniem danych pociągu i wybranych funkcji. Następnie zastosuj klasyfikator do testowania danych (ponownie używając tylko wybranych funkcji). Wykorzystywana jest walidacja z pominięciem jednego z nich.
  3. uzyskać dokładność klasyfikacji
  4. Uśrednianie: powtórz 1) -3) N razy. (100).N=50

Zgodziłbym się, że wykonanie FS dla całego zestawu danych może wprowadzić pewne odchylenie, ale moim zdaniem jest ono „uśredniane” podczas uśredniania (krok 4). Czy to jest poprawne? (Wariant dokładności wynosi )<2%

1 Guyon, I. (2003) „Wprowadzenie do wyboru zmiennych i cech”, The Journal of Machine Learning Research, t. 3, s. 1157-1182
2 Singhi, SK i Liu, H. (2006) „Bias selekcji podzbiorów funkcji dla uczenia się klasyfikacji”, kontynuacja ICML '06 Materiały z 23. międzynarodowej konferencji nt. Uczenia maszynowego, s. 849-856

Odpowiedzi:


12

Procedura, której używasz, spowoduje optymistyczne oszacowanie wydajności, ponieważ używasz danych z zestawu testowego użytego w krokach 2 i 3, aby zdecydować, które funkcje zastosowane w kroku 1. Powtórzenie ćwiczenia zmniejsza wariancję oszacowania wydajności, a nie stronniczość, więc stronniczość się nie uśredni. Aby uzyskać obiektywną ocenę wydajności, danych testowych nie można wykorzystywać w żaden sposób do dokonywania wyborów dotyczących modelu, w tym wyboru funkcji.

Lepszym podejściem jest zastosowanie zagnieżdżonej weryfikacji krzyżowej, dzięki czemu zewnętrzna weryfikacja krzyżowa zapewnia oszacowanie wydajności możliwej do uzyskania przy użyciu metody konstruowania modelu (w tym wyboru cech), a wewnętrzna weryfikacja krzyżowa służy do niezależnego wyboru funkcji w każdej zakładce zewnętrznej walidacji krzyżowej. Następnie zbuduj swój ostateczny model predykcyjny z wykorzystaniem wszystkich danych.

Ponieważ masz więcej funkcji niż przypadków, istnieje duże prawdopodobieństwo, że dane będą nadmiernie dopasowane do siebie po prostu przez wybór funkcji. Jest trochę mitem, że wybór funkcji poprawia wydajność predykcyjną, więc jeśli to jest to, czym jesteś zainteresowany (zamiast identyfikowania odpowiednich funkcji jako celu samego w sobie), prawdopodobnie lepiej jest użyć regresji grzbietu i nie wykonywać żadnej funkcji wybór. Zapewni to prawdopodobnie lepszą wydajność predykcyjną niż wybór funkcji, pod warunkiem, że parametr grzbietu zostanie starannie wybrany (używam minimalizacji statystyki PRESS Allena - tj. Pomijanego błędu średniego kwadratu).

Aby uzyskać więcej informacji, zobacz Ambroise i McLachlan oraz moją odpowiedź na to pytanie .


Dziękuję za odpowiedź. W rzeczywistości jestem zainteresowany obydwoma, aby znaleźć odpowiednie funkcje i poprawić wydajność predykcyjną. W moich eksperymentach (SVM do klasyfikacji) wybór funkcji znacznie poprawił dokładność przewidywania (jednak, jak zauważyłeś, może to być wynikiem nadmiernego dopasowania danych). Zakładam, że przez regresję grzbietu masz na myśli coś, co znane jest również jako regularyzacja Tichonowa?
pedro29

tak, regresja kalenicy jest po prostu normalną regresją liniową z karnym terminem opartym na kwadratowej normie wag. W przypadku większości problemów działa tak samo dobrze, jak SVM, ale jest łatwiejszy do wdrożenia (i można opracować pomijalny błąd weryfikacji krzyżowej zasadniczo za darmo, którego można użyć do dostrojenia hiper-parametrów).
Dikran Marsupial

nawiasem mówiąc, jaka jest różnica między regularyzacją grzbietu a wyborem funkcji? Mam na myśli, że pod koniec dnia oba wskazują „najlepszy podzbiór” predyktorów z danego zestawu predyktorów.
pedro29

regresja grzbietowa nie identyfikuje podzbioru cech, tak jak reguła karna LASSO lub LARS. To byłby mój wybór metody wyboru cech, ponieważ jest ona mniej podatna na nadmierne dopasowanie, ponieważ kara wymusza uporządkowanie funkcji wchodzących i wychodzących z modelu, więc jest mniej stopni swobody niż tylko wyczerpujące poszukiwanie najlepszego zestawu funkcje.
Dikran Torbacz

3

Jako dodatek do zamieszczonych tutaj odpowiedzi mam dwa linki, które naprawdę pomogły mi zrozumieć, dlaczego nie jest to dobra procedura:

Edycja: zgodnie z prośbą, krótkie wyjaśnienie zawartości linków:

Załóżmy, że trenuję klasyfikatora i mam zestaw danych zawierający 1000 próbek, z których każdy ma milion funkcji. Nie mogę przetworzyć ich wszystkich, więc potrzebuję mniej funkcji (powiedzmy, że mogę obliczyć 300 funkcji). Posiadam również zestaw testowy 100 próbek, aby dokładnie oszacować moją dokładność poza rzeczywistością.

Jeśli odfiltruję mój milion funkcji do 300, wybierając te, które mają najwyższą korelację z celami całego zbioru danych, popełniam błąd (ponieważ wprowadzam nadmierne dopasowanie, którego później nie może wykryć Cross Validation). Mój trzymany zestaw pokaże to, wyrzucając złą wartość dokładności.

Zgodnie z powyższymi linkami poprawnym sposobem jest podzielenie mojego zestawu danych na zestaw treningowy i zestaw Cross-Validation, a następnie dostrojenie mojego modelu (filtrowanie funkcji itp.) Na podstawie tego zestawu treningowego i powiązanej z nim oceny CV. Jeśli używam K-foldów, muszę nastroić od zera za każdym razem, gdy wykonuję split / fold, a następnie uśredniam wyniki.

Programowo wykonujesz następujące czynności:

  • Zachowaj część zestawu danych jako zestaw blokujący.
  • Podziel resztę zestawu danych (odtąd T1) na K-folds.
  • W pętli for od i = 1 do K wykonaj następujące czynności:
    • wybierz i-ty fold jako zestaw CV, a pozostałe próbki jako zestaw treningowy (odtąd zwany Ti).
    • Wykonuj dowolną inżynierię i wybór funkcji: filtruj funkcje, łącz je itp.
    • Konwertuj zarówno swój zestaw CV (bieżący fold, zwany CVi), jak i obecny zestaw treningowy Ti na jeden z odpowiednimi funkcjami.
    • Trenuj swój model na zestawie treningowym Ti
    • Uzyskaj wynik z bieżącego foldera, CVi. Dołącz ten wynik do listy zawierającej wszystkie wyniki.
  • Teraz twoja lista ma wynik każdego z foldów, więc go uśredniasz, uzyskując wynik z K-foldów.

Bardzo ważne jest, aby wykonać inżynierię funkcji w pętli, na zestawie przedtreningowym Ti, a nie na pełnym zestawie treningowym T1.

Powodem tego jest to, że kiedy montujesz / wyposażasz inżyniera w Ti, testujesz CVi, czego nie widać w tym modelu. Natomiast jeśli dopasujesz / będziesz inżynierem funkcji na T1, każde wybrane przez Ciebie CV musi być podzbiorem T1, więc będziesz optymistycznie nastawiony, tj. Będziesz się przestawiał, ponieważ trenujesz i testujesz na tych samych próbkach danych.

Naprawdę dobrą odpowiedzią StackExchange jest ta , która naprawdę wyjaśnia ją bardziej szczegółowo i na przykładzie kodu. Zobacz to również jako uzupełnienie.


1
Czy możesz dołączyć krótkie podsumowanie treści tych linków? Preferujemy samodzielne odpowiedzi, w przeciwnym razie mogą być bardzo podatne na „linkrot”, jeśli linki zmienią lokalizację. Alternatywnie możemy przekonwertować to na komentarz.
Silverfish

@Silverfish Done
Abhishek Divekar

Czyli w pętli for można mieć różne wybrane funkcje dla różnych foldów?
stackunderflow

2

Pasek startowy „optymizm” Efron-Gong jest do tego bardzo dobry. Chodzi o wykorzystanie wszystkich dostępnych danych do opracowania modelu predykcyjnego i wykorzystanie wszystkich danych do oszacowania prawdopodobnej przyszłej wydajności tego samego modelu. A twoja próbka jest za mała 100 razy, aby można było zastosować jakiekolwiek podejście podzielonej próby.

Y

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.