ML Atlas

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ć.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: kNN na winach z dokładanymi kolumnami szumu: odległości do najbliższego i najdalszego wina się wyrównują, a trafność spada.

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') z SelectFromModel.
  • Selekcja zawsze jako krok Pipeline, oceniana przez cross_val_score na 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

Zobacz też