Jak zastosować do modelu LASSO metodę Iterative Reweighted Least Squares (IRLS)?

12

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:

(XTWX)δβ^=XT(yp)

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:λ

XT(yp)λ×sign(β^)

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),λ=0
  • 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 . ββ0β

i1,βisign(βi)×max(0,|βi|λ)
Wok
źródło
Nadal nie można uzyskać lepszej konwergencji poprzez dostosowanie IRLS. : '(
Wok

Odpowiedzi:

12

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.

użytkownik603
źródło
@wok Warto zauważyć, że pakiet scikit.learn oferuje również wydajną implementację w Pythonie dla tego rodzaju rzeczy.
chl
Algorytm opadania współrzędnych jest interesujący. Dzięki. Nadal o tym myślę.
Wok
5

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

Dikran Torbacz
źródło
Dzięki. Czytam to i myślę o tym. Byłaby to jednak ogromna modyfikacja obecnego algorytmu.
Wok
4

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
0

IRLS dla problemu LASSO jest następujący:

argminx12Axb22+λx1=argminx12Axb22+λxTWx

Gdzie jest macierzą diagonalną - . Pochodzi z .W i , i = 1WWi,i=1|xi|
x1=i|xi|=ixi2|xi|

Teraz powyższe jest po prostu regularyzacją Tichonowa .
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 ):WxxTWxxxdiag(sign(x))Wx

xk+1=(ATA+λWk)1ATb

Gdzie .Wi,iK=1|xik|

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

Royi
źródło