Pracuję nad problemem ze zbyt wieloma funkcjami, a szkolenie moich modeli trwa zdecydowanie za długo. Zaimplementowałem algorytm wybierania do przodu, aby wybrać funkcje.
Zastanawiałem się jednak, czy scikit-learn ma algorytm selekcji do przodu / regresji krokowej?
feature-selection
scikit-learn
Maksud
źródło
źródło
Odpowiedzi:
Nie, sklearn nie wydaje się mieć algorytmu selekcji do przodu. Jednak zapewnia rekurencyjną eliminację cech, która jest chciwym algorytmem eliminacji cech podobnym do sekwencyjnego wybierania wstecznego. Zobacz dokumentację tutaj:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
źródło
coef_
interfejs. Wykluczałoby to metodę opartą na drzewach itp. Myślę jednak, że o co prosił @Maksud, jest to, co opisano w „An Introduction to statystycznego uczenia się” Jamesa, w którym cechy są rekurencyjnie dodawane / usuwane według ich ważności, którą określa ilościowo przez dokładność zestawu walidacyjnego . Umożliwia to wybór funkcji we wszystkich typach modeli, a nie tylko liniowych parametrycznych.Sklearn ma algorytm selekcji do przodu, chociaż nie jest tak nazywany w scikit-learn. Metoda wyboru funkcji o nazwie F_regresja w scikit-learn będzie sekwencyjnie obejmować funkcje, które najbardziej poprawią model, dopóki nie pojawią się
K
funkcje w modelu (K jest wejściem).Zaczyna się od regresji etykiet każdego elementu osobno, a następnie obserwując, która cecha najbardziej poprawiła model przy użyciu statystyki F. Następnie włącza zwycięską funkcję do modelu. Następnie iteruje pozostałe funkcje, aby znaleźć kolejną cechę, która najbardziej ulepsza model, ponownie za pomocą statystyki F lub testu F. Robi to, dopóki w modelu nie będzie funkcji K.
Zauważ, że pozostałe funkcje, które są skorelowane z elementami włączonymi do modelu, prawdopodobnie nie zostaną wybrane, ponieważ nie korelują z resztami (chociaż mogą dobrze korelować z etykietami). Pomaga to chronić przed wielokolinearnością.
źródło
Scikit-learn rzeczywiście nie obsługuje regresji stopniowej. Jest tak, ponieważ to, co jest powszechnie znane jako „regresja krokowa”, jest algorytmem opartym na wartościach p współczynników regresji liniowej, a scikit-learning celowo unika inferencyjnego podejścia do uczenia się modelu (testowanie istotności itp.). Co więcej, czysty OLS jest tylko jednym z wielu algorytmów regresji, a z punktu widzenia scikit-learning nie jest ani bardzo ważny, ani jeden z najlepszych.
Istnieją jednak porady dla tych, którzy nadal potrzebują dobrego sposobu wyboru funkcji za pomocą modeli liniowych:
ElasticNet
lubLasso
.StandardScaler
, a następnie zamawiaj je po prostumodel.coef_
. Dla idealnie niezależnych zmiennych towarzyszących jest to równoważne sortowaniu według wartości p. Klasasklearn.feature_selection.RFE
zrobi to za Ciebie, aRFECV
nawet oceni optymalną liczbę funkcji.statsmodels
mlxtend
Pakiet kompatybilny z scikit-learn obsługuje to podejście dla każdego estymatora i każdej metryki.statsmodels
, ponieważ ten pakiet oblicza dla ciebie wartości p. Podstawowy wybór do przodu i do tyłu może wyglądać następująco:``
W tym przykładzie zostaną wydrukowane następujące dane wyjściowe:
źródło
W rzeczywistości istnieje przyjemny algorytm o nazwie „Forward_Select”, który używa Statsmodels i pozwala ustawić własną metrykę (AIC, BIC, skorygowane R-kwadrat lub cokolwiek zechcesz), aby stopniowo dodawać zmienną do modelu. Algorytm można znaleźć w sekcji komentarzy na tej stronie - przewiń w dół, a zobaczysz go u dołu strony.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Dodałbym, że algorytm ma również jedną fajną cechę: możesz zastosować go do problemów klasyfikacji lub regresji! Musisz tylko to powiedzieć.
Wypróbuj i przekonaj się sam.
źródło
W rzeczywistości sklearn nie ma algorytmu wybierania do przodu, pomyślał, że żądanie ściągnięcia z implementacją wybierania do przodu czeka w repozytorium Scikit-Learn od kwietnia 2017 r.
Alternatywnie istnieje mlxtend do przodu i do przodu o jeden krok do tyłu . Możesz go znaleźć w Sekwencyjnym narzędziu wyboru
źródło