02 · Dane · 4 min czytania · Interaktywne · aktualizacja
Jak wybrać najważniejsze cechy do modelu i kiedy selekcja cech pomaga?
W skrócie
Selekcja cech zostawia podzbiór zmiennych: by uprościć model, przyspieszyć go i zmniejszyć szum. Wykonana poza walidacją krzyżową daje fałszywie wysokie wyniki.
Co to jest
Selekcja cech (ang. feature selection) to wybór podzbioru zmiennych, na których model będzie się uczył, i odrzucenie reszty. Cele są trzy: lepsza generalizacja (mniej szumu do przeuczenia), prostszy i tańszy model (mniej pomiarów, szybsze działanie) oraz łatwiejsza interpretacja.
Metody dzieli się na trzy rodziny. Filtry oceniają każdą cechę osobno, np. testem F, korelacją czy informacją wzajemną z celem. Metody opakowujące (wrappers) trenują model na różnych podzbiorach i wybierają najlepszy, np. rekurencyjna eliminacja cech (RFE). Metody wbudowane wybierają cechy w trakcie uczenia, np. lasso zeruje wagi, a drzewa po prostu nie używają nieprzydatnych zmiennych.
Intuicja: lekarz nie zleca wszystkich możliwych badań. Wybiera kilka, które razem najlepiej rozstrzygają diagnozę — a nie te, które osobno są najbardziej „związane” z chorobą, bo te często powtarzają tę samą informację.
Mechanizm — dlaczego tak działa
Każda cecha bez informacji o celu to dodatkowy wymiar, w którym model może dopasować się do przypadkowych fluktuacji. Przy małej liczbie przykładów i wielu cechach przypadkowe korelacje są nieuniknione: wśród tysięcy losowych zmiennych zawsze znajdą się takie, które „przewidują” etykiety w tej konkretnej próbie. Usunięcie ich zmniejsza wariancję modelu.
Filtry są szybkie, ale ślepe na dwie rzeczy. Po pierwsze na redundancję: dwie prawie identyczne cechy dostaną wysokie oceny obie, choć druga nic nie wnosi. Po drugie na interakcje: cecha bezużyteczna osobno może być kluczowa w połączeniu z inną (jak w problemie XOR). Metody opakowujące i wbudowane widzą cechy w kontekście, ale kosztują więcej obliczeń i same mogą się przeuczyć, bo przeszukują wiele podzbiorów.
Najważniejsza pułapka dotyczy oceny. Jeśli wybierasz cechy na całym zbiorze, a potem mierzysz trafność walidacją krzyżową, selekcja już „widziała” dane testowe każdego foldu. Hastie, Tibshirani i Friedman opisują to jako „zły sposób robienia walidacji krzyżowej”, a Ambroise i McLachlan (2002) pokazali, że ten błąd zawyżał wyniki w badaniach nad danymi genetycznymi. Selekcja jest częścią modelu i musi być powtarzana wewnątrz każdego foldu.
Selekcja nie zawsze poprawia trafność. Przy umiarkowanej liczbie cech i regularyzowanym modelu odrzucenie zmiennych często ją obniża — wtedy płacimy dokładnością za prostotę. Warto też pamiętać, że wybrany zestaw bywa niestabilny: przy skorelowanych cechach inna próba wskaże inne zmienne o podobnej jakości, więc „wybrane” nie znaczy „przyczynowe”.
Na przykładzie
Zbiór Breast Cancer Wisconsin ma 569 guzów i 30 cech, wiele z nich niemal identycznych: korelacja średniego promienia z obwodem wynosi 0,998, a z polem 0,987. Aż 21 z 435 par cech ma |r| > 0,9. Regresja logistyczna na wszystkich 30 cechach osiąga w 10-krotnej walidacji krzyżowej 97,7%. Z selekcją filtrem (test F, SelectKBest w potoku) wynik spada: 95,8% dla 10 cech, 94,4% dla 5, 90,7% dla jednej. Filtr wybrał pięć cech, z których trzy opisują ten sam rozmiar guza (średni obwód, największy promień i największy obwód), a dwie — tę samą wklęsłość konturu — redundancja w czystej postaci. RFE z pięcioma cechami daje 95,8%, czyli więcej niż filtr z tą samą liczbą cech, bo ocenia cechy razem.
Pułapkę oceny widać na czystym szumie: 100 przykładów, 10 000 losowych cech, losowe etykiety. Wybór 20 „najlepszych” cech na całym zbiorze, a potem 5-krotna walidacja krzyżowa, daje 87% trafności. Ta sama procedura z selekcją wewnątrz potoku — 47%, czyli poziom zgadywania, jak powinno być.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
- Filtry:
SelectKBest(f_classif, k=...),mutual_info_classif,VarianceThreshold(usuwa cechy stałe). - Opakowujące:
RFE,RFECV,SequentialFeatureSelector. - Wbudowane:
Lasso/LogisticRegression(penalty='l1', solver='liblinear')zSelectFromModel. - Selekcja zawsze jako krok
Pipeline, oceniana przezcross_val_scorena całym potoku. - Przed selekcją usuń duplikaty i cechy prawie idealnie skorelowane — redukuje to niestabilność.
- Typowy błąd: interpretowanie wybranych cech jako jedynych ważnych lub przyczynowych.
Najczęstsze pytania
- Selekcja cech czy redukcja wymiaru (PCA)?
- Selekcja zostawia oryginalne zmienne, więc model jest interpretowalny i wymaga mniej pomiarów. PCA tworzy nowe kombinacje wszystkich zmiennych — często lepiej kompresuje informację, ale nadal trzeba mierzyć wszystko, a składowe trudno nazwać.
- Ile cech wybrać?
- Liczbę cech traktuj jak hiperparametr i dobieraj ją walidacją krzyżową (`RFECV` robi to automatycznie). Często krzywa wyniku jest płaska w szerokim zakresie — wtedy wybierz mniejszy zestaw.
- Czy drzewa i lasy losowe potrzebują selekcji cech?
- Mniej niż modele liniowe, bo same wybierają podziały. Bardzo wiele zaszumionych cech nadal jednak pogarsza wynik i spowalnia uczenie, a ważności cech z drzew bywają zawyżone dla zmiennych o wielu wartościach.
Źródła
- Guyon I., Elisseeff A. (2003). „An Introduction to Variable and Feature Selection”. Journal of Machine Learning Research, 3, 1157–1182.
- Ambroise C., McLachlan G. J. (2002). „Selection bias in gene extraction on the basis of microarray gene-expression data”. PNAS, 99(10), 6562–6566.
- Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 3.3 i 7.10.2.
- James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., 2021, rozdz. 6.
- Dokumentacja scikit-learn: Feature selection, https://scikit-learn.org/stable/modules/feature_selection.html