Wie wende ich die Methode der iterativ neu gewichteten kleinsten Quadrate (IRLS) auf das LASSO-Modell an?

12

Ich habe eine logistische Regression mit dem IRLS-Algorithmus programmiert . Ich möchte eine LASSO-Bestrafung anwenden , um automatisch die richtigen Funktionen auszuwählen. Bei jeder Iteration wird Folgendes gelöst:

(XTWX)δβ^=XT(yp)

Sei eine nicht negative reelle Zahl. Ich bestrafe nicht den in The Elements of. Statistisches Lernen . Das Gleiche gilt für die bereits null Koeffizienten. Ansonsten subtrahiere ich einen Begriff von der rechten Seite:λ

XT(yp)λ×sign(β^)

Ich bin mir jedoch nicht sicher, ob der IRLS-Algorithmus geändert wurde. Ist es der richtige Weg?


Edit: Obwohl ich mir nicht sicher war, ist hier eine der Lösungen, die ich endlich gefunden habe. Interessant ist, dass diese Lösung dem entspricht, was ich jetzt über LASSO verstehe. Bei jeder Iteration gibt es in der Tat zwei Schritte anstatt nur einen:

  • Der erste Schritt ist derselbe wie zuvor: Wir machen eine Iteration des Algorithmus (als ob in der Formel für den obigen Gradienten),λ=0
  • Der zweite Schritt ist der neue: Wir wenden auf jede Komponente (mit Ausnahme der Komponente , die dem entspricht) des Vektors , der im ersten Schritt erhalten wurde , eine weiche Schwelle an . Dies wird als iterativer Soft-Thresholding-Algorithmus bezeichnet . ββ0β

i1,βisign(βi)×max(0,|βi|λ)
Wok
quelle
Eine bessere Konvergenz durch die Anpassung von IRLS konnte immer noch nicht erreicht werden. : '(
Wok

Antworten:

12

Dieses Problem wird normalerweise durch Anpassen durch Koordinatenabstieg gelöst ( siehe hier ). Diese Methode ist sicherer, numerisch effizienter, algorithmisch einfacher zu implementieren und auf eine allgemeinere Reihe von Modellen anwendbar (einschließlich Cox-Regression). Eine R-Implementierung ist im R- Paket glmnet verfügbar . Die Codes sind Open Source (teilweise in und in C, teilweise in R), sodass Sie sie als Blaupausen verwenden können.

user603
quelle
@wok Bemerkenswerterweise bietet das scikit.learn-Paket auch eine effiziente Implementierung in Python für solche Dinge.
Chl
Interessant ist der Algorithmus für den Koordinatenabstieg. Vielen Dank. Ich denke immer noch darüber nach.
Wok
5

Die LASSO-Verlustfunktion weist entlang jeder Achse eine Diskontinuität von Null auf, sodass IRLS Probleme damit haben wird. Ich habe festgestellt, dass ein Ansatz mit sequentieller Minimaloptimierung (SMO) sehr effektiv ist, siehe z

http://bioinformatics.oxfordjournals.org/content/19/17/2246

eine Version mit MATLAB-Software ist

http://bioinformatics.oxfordjournals.org/content/22/19/2348

Die Software ist hier erhältlich:

http://theoval.cmp.uea.ac.uk/~gcc/cbl/blogreg/

Die Grundidee besteht darin, die Koeffizienten nacheinander zu optimieren und zu testen, ob Sie die Diskontinuität nacheinander überschreiten. Dies ist einfach, da Sie eine skalare Optimierung durchführen. Es mag langsam klingen, ist aber tatsächlich ziemlich effizient (obwohl ich erwarte, dass seitdem bessere Algorithmen entwickelt wurden - wahrscheinlich von Keerthi oder Chih-Jen Lin, die beide führende Experten auf diesem Gebiet sind).

Dikran Beuteltier
quelle
Vielen Dank. Ich lese das und denke darüber nach. Dies wäre jedoch eine enorme Modifikation des aktuellen Algorithmus.
Wok
4

Sie können das Papier überprüfen: Effiziente L1-regulierte logistische Regression, ein IRLS-basierter Algorithmus für LASSO. In Bezug auf die Implementierung kann der Link für Sie nützlich sein (http://ai.stanford.edu/~silee/softwares/irlslars.htm).


quelle
0

Der IRLS für das LASSO-Problem lautet wie folgt:

argminx12Axb22+λx1=argminx12Axb22+λxTWx

Wobei eine diagonale Matrix ist - . Dies kommt von .WWi,i=1|xi|
x1=i|xi|=ixi2|xi|

Nun ist das Obige nur die Tikhonov-Regularisierung .
Da jedoch abhängt muß es iterativ lösen (auch hebt dies den 2 Faktor in Tikhonov Regularisierung, als Ableitung von in Bezug auf und hält als konstant entspricht ):WxxTWxxxdiag(sign(x))Wx

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

Wobei .Wi,iK=1|xik|

Die Initialisierung kann durch .W=I

Achten Sie darauf, dass dies bei großen Werten von nicht gut funktioniert, und verwenden Sie besser ADMM oder Coordinate Descent.λ

Royi
quelle