Wie führe ich eine nicht negative Gratregression durch? Nicht-negatives Lasso ist in verfügbar scikit-learn
, aber für Ridge kann ich die Nicht-Negativität von Betas nicht erzwingen, und tatsächlich erhalte ich negative Koeffizienten. Weiß jemand warum das so ist?
Kann ich Ridge auch in Bezug auf reguläre kleinste Quadrate implementieren? Dies wurde auf eine andere Frage verschoben: Kann ich eine Ridge-Regression in Bezug auf die OLS-Regression implementieren?
regression
lasso
regularization
ridge-regression
Der Baron
quelle
quelle
Antworten:
Die eher antiklimatische Antwort auf " Weiß jemand, warum das so ist? " Ist, dass sich einfach niemand genug darum kümmert, eine nicht negative Gratregressionsroutine zu implementieren. Einer der Hauptgründe ist, dass die Menschen bereits damit begonnen haben, nicht negative elastische Netzroutinen zu implementieren (zum Beispiel hier und hier ). Das elastische Netz enthält als Sonderfall die Gratregression (man hat den LASSO-Teil im Wesentlichen so eingestellt, dass er eine Gewichtung von Null hat). Diese Werke sind relativ neu, daher wurden sie noch nicht in scikit-learn oder ein ähnliches Paket für den allgemeinen Gebrauch aufgenommen. Möglicherweise möchten Sie die Autoren dieser Artikel nach Code fragen.
BEARBEITEN:
Wie @amoeba und ich in den Kommentaren besprochen haben, ist die tatsächliche Implementierung relativ einfach. Angenommen, man hat das folgende Regressionsproblem:
Dabei sind und beide Standardnormalen wie: . Beachten Sie, dass ich standardisierte Prädiktorvariablen verwende, damit ich mich danach nicht normalisieren muss. Der Einfachheit halber füge ich auch keinen Abschnitt hinzu. Wir können dieses Regressionsproblem sofort mit der linearen Standardregression lösen. In R sollte es also ungefähr so sein:x 2 x p ∼ N ( 0 , 1 )x1 x2 xp∼N(0,1)
Beachten Sie die letzte Zeile. Fast alle linearen Regressionsroutinen verwenden die QR-Zerlegung, um zu schätzen . Wir möchten dasselbe für unser Ridge-Regressionsproblem verwenden. An dieser Stelle lesen Sie diesen Beitrag von @whuber; Wir werden genau dieses Verfahren implementieren . Kurz gesagt, wir werden unsere ursprüngliche Entwurfsmatrix mit einer Diagonalmatrix und unseren Antwortvektor mit Nullen erweitern. Auf diese Weise können wir das ursprüngliche Gratregressionsproblem als erneut ausdrücken wobei derX √β X yp(XTX+λI) - 1 XTy( ˉ X T ˉ X ) - 1 ˉ X T ˉ y ¯λ−−√Ip y p (XTX+λI)−1XTy (X¯TX¯)−1X¯Ty¯ ¯ symbolisiert die erweiterte Version. Überprüfen Sie auch die Folien 18-19 aus diesen Notizen auf Vollständigkeit. Ich fand sie recht einfach. In R möchten wir also Folgendes:
und es funktioniert. OK, also haben wir den Ridge-Regressionsteil bekommen. Wir könnten es jedoch auf andere Weise lösen, wir könnten es als Optimierungsproblem formulieren, bei dem die verbleibende Quadratsumme die Kostenfunktion ist, und dann dagegen optimieren, d. H. . Sicher können wir das tun:minβ||y¯−X¯β||22
was wie erwartet wieder funktioniert. Jetzt wollen wir nur noch: wobei . Das ist einfach das gleiche Optimierungsproblem, aber eingeschränkt, so dass die Lösung nicht negativ ist. β≥0minβ||y¯−X¯β||22 β≥0
Dies zeigt, dass die ursprüngliche nicht negative Gratregressionsaufgabe gelöst werden kann, indem sie als einfaches eingeschränktes Optimierungsproblem umformuliert wird. Einige Einschränkungen:
optim
‚s L-BFGS-B - Argument. Es ist der Vanille-R-Löser, der Grenzen akzeptiert. Ich bin sicher, dass Sie Dutzende besserer Löser finden werden.Code für Punkt 5:
quelle
Das R-Paket glmnet, das ein elastisches Netz und damit Lasso und Ridge implementiert, ermöglicht dies. Mit den Parametern
lower.limits
undupper.limits
können Sie für jedes Gewicht separat einen Minimal- oder Maximalwert festlegen. Wenn Sie also die Untergrenzen auf 0 setzen, wird ein nicht negatives elastisches Netz (Lasso / Grat) ausgeführt.Es gibt auch einen Python-Wrapper https://pypi.python.org/pypi/glmnet/2.0.0
quelle
Denken Sie daran, wir versuchen zu lösen:
ist äquivalent zu:
mit etwas mehr Algebra:
Die Lösung in Pseudo-Python ist einfach zu tun:
siehe: Wie macht man spärliche nicht negative kleinste Quadrate mit Regularisierern der Form ?x ⊤ R k xK x⊤Rkx
für eine etwas allgemeinere Antwort.
quelle