Zaprogramowałem regresję logistyczną przy użyciu algorytmu IRLS . Chciałbym zastosować karę LASSO , aby automatycznie wybrać odpowiednie funkcje. Przy każdej iteracji rozwiązuje się następujące kwestie:
Niech będzie nieujemną liczbą rzeczywistą. Nie penalizuję przechwytywania, jak sugerowano w The Elements of. Nauka statystyczna . To samo dotyczy już zerowych współczynników. W przeciwnym razie odejmuję termin z prawej strony:
Jednak nie jestem pewien co do modyfikacji algorytmu IRLS. Czy to właściwy sposób?
Edycja: Chociaż nie byłem tego pewien, oto jedno z rozwiązań, które w końcu wymyśliłem. Co ciekawe, to rozwiązanie odpowiada temu, co teraz rozumiem na temat LASSO. W każdej iteracji istnieją rzeczywiście dwa kroki zamiast tylko jednego:
- pierwszy krok jest taki sam jak poprzednio: wykonujemy iterację algorytmu (tak jakby we wzorze na gradient powyżej),
- drugi krok jest nowy: stosujemy miękki próg dla każdego komponentu (z wyjątkiem komponentu , który odpowiada przecięcia) wektora uzyskanego w pierwszym kroku. Nazywa się to iteracyjnym algorytmem miękkiego progowania . β
Odpowiedzi:
Ten problem zazwyczaj rozwiązuje się przez dopasowanie przez opadanie współrzędnych ( patrz tutaj ). Ta metoda jest bezpieczniejsza, bardziej wydajna numerycznie, algorytmicznie łatwiejsza do wdrożenia i ma zastosowanie do bardziej ogólnej gamy modeli (w tym również regresji Coxa). Implementacja R jest dostępna w pakiecie R glmnet . Kody są typu open source (częściowo w C, częściowo w R), więc możesz używać ich jako schematów.
źródło
Funkcja utraty LASSO ma nieciągłość zerową wzdłuż każdej osi, więc IRLS będzie miał z nią problemy. Uważam, że podejście oparte na sekwencyjnej minimalnej optymalizacji (SMO) jest bardzo skuteczne, patrz np
http://bioinformatics.oxfordjournals.org/content/19/17/2246
jest wersja z oprogramowaniem MATLAB
http://bioinformatics.oxfordjournals.org/content/22/19/2348
oprogramowanie jest dostępne tutaj:
http://theoval.cmp.uea.ac.uk/~gcc/cbl/blogreg/
Podstawową ideą jest optymalizacja współczynników pojedynczo i testowanie, czy przekraczasz nieciągłość jeden współczynnik na raz, co jest łatwe, ponieważ przeprowadzasz optymalizację skalarną. Może to zabrzmieć powoli, ale w rzeczywistości jest dość wydajne (choć spodziewam się, że od tego czasu opracowano lepsze algorytmy - prawdopodobnie przez Keerthi lub Chih-Jen Lin, którzy są wiodącymi ekspertami w tego rodzaju sprawach).
źródło
Możesz sprawdzić artykuł: Wydajna regresja logistyczna z regulacją L1, która jest algorytmem opartym na IRLS dla LASSO. Jeśli chodzi o implementację, link może być dla Ciebie przydatny (http://ai.stanford.edu/~silee/softwares/irlslars.htm).
źródło
IRLS dla problemu LASSO jest następujący:
Gdzie jest macierzą diagonalną - . Pochodzi z .W i , i = 1W Wi,i=1|xi|
∥x∥1=∑i|xi|=∑ix2i|xi|
Teraz powyższe jest po prostu regularyzacją Tichonowa .W x xTWx x x diag(sign(x)) Wx
Ponieważ jednak zależy od należy go rozwiązać iteracyjnie (anuluje to również 2 czynnik w regularyzacji Tichonowa, jako pochodna w odniesieniu do gdy jest stała, to co odpowiada ):
Gdzie .WKi,i=1∣∣xki∣∣
Inicjalizacja może odbywać się .W=I
Zwróć uwagę, że to nie działa dobrze dla dużych wartości i lepiej użyj ADMM lub Descent Coordinate Descent.λ
źródło