Ridge bestraft GLMs mit Row Augmentation?

12

Ich habe gelesen, dass eine Ridge-Regression durch einfaches Hinzufügen von Datenzeilen zur ursprünglichen Datenmatrix erzielt werden kann, wobei jede Zeile unter Verwendung von 0 für die abhängigen Variablen und der Quadratwurzel von k oder Null für die unabhängigen Variablen erstellt wird. Für jede unabhängige Variable wird dann eine zusätzliche Zeile hinzugefügt.

Ich habe mich gefragt, ob es möglich ist, für alle Fälle einen Beweis abzuleiten, auch für logistische Regressionen oder andere GLMs.

Schneeflocke
quelle
Nein, ich habe es von ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… bekommen und es wurde kurz auf Seite 335-4
Schneeflocke
1
Entschuldigung, dass Sie dort den Kommentar gelöscht haben. Ich entschied, dass ich mich geirrt hatte, bevor ich Ihre Antwort sah und löschte sie.
Glen_b
2
Eine kleine Verallgemeinerung dieses Problems wird unter stats.stackexchange.com/questions/15991 gefragt und beantwortet . Da der logistische Regressionsteil dieser Frage nicht angesprochen wird, stimme ich nicht für die Zusammenführung der beiden Themen.
Whuber
GLMs werden unter Verwendung iterativ neu gewichteter kleinster Quadrate angepasst, wie in bwlewis.github.io/GLM , und so kann man innerhalb jeder Iteration den regulären Schritt der kleinsten Quadrate durch einen Schritt der bestraften kleinsten Quadrate ersetzen, um einen bestraften Kamm-GLM zu erhalten. In Kombination mit adaptiven Ridge-Strafen wird dies für die Anpassung von L0-bestraften GLM verwendet, wie im l0ara-Paket, siehe biodatamining.biomedcentral.com/articles/10.1186/… und journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers

Antworten:

13

Ridge Regression minimiert .i=1n(yixiTβ)2+λj=1pβj2

(Oft wird eine Konstante benötigt, aber nicht verkleinert. In diesem Fall ist sie in den und Prädiktoren enthalten. Wenn Sie sie jedoch nicht verkleinern möchten, haben Sie keine entsprechende Zeile für die Pseudobeobachtung. Oder wenn Sie wollen es schrumpfen, Sie tun es eine Reihe haben. ich kann es schreiben würde , als ob es in dem nicht gezählt ist p , und nicht geschrumpft, da es der kompliziertere Fall ist. der andere Fall eine triviale Änderung von dieser ist. )βp

Wir können den zweiten Term als Pseudobeobachtungen schreiben, wenn wir jedes "y" und jeden der entsprechenden ( p + 1 ) -Vektoren "x" so schreiben können p(p+1)

(yn+jxn+jTβ)2=λβj2,j=1,,p

Aber bei der Betrachtung sei einfach , sei x n + j , j = yn+j=0 und lassen Sie alle anderenx n + j , k =0(einschließlichx n + j , 0 =0typisch).xn+j,j=λxn+j,k=0xn+j,0=0

Dann

.(yn+j[xn+j,0β0+xn+j,1β1+xn+j,2β2+...+xn+j,pβp])2=λβj2

Dies funktioniert für die lineare Regression. Bei der logistischen Regression funktioniert dies nicht, da bei der normalen logistischen Regression die Summe der quadratischen Residuen nicht minimiert wird.

[Ridge-Regression ist nicht das einzige, was mit solchen Pseudo-Beobachtungstricks erreicht werden kann - sie tauchen in einer Reihe anderer Zusammenhänge auf.]

Glen_b - Setzen Sie Monica wieder ein
quelle
Danke, ich hatte bereits Probleme damit, alles von der logistischen Regression umzuschreiben, aber ich konnte die falsche Datenmethode einfach nicht implementieren. Und ich vertraue meinen eigenen Fähigkeiten nicht genug, um sagen zu können, dass es unmöglich ist.
Schneeflocke
Zumindest glaube ich das nicht. Ich werde noch einen Blick auf die Wahrscheinlichkeitsfunktion werfen.
Glen_b
3
+1 Zusätzliche relevante Regressions Tricks sind in Antworten auf eingeführt stats.stackexchange.com/a/32753 und stats.stackexchange.com/a/26187 , unter anderem .
whuber
GLMs werden jedoch unter Verwendung iterativ neu gewichteter kleinster Quadrate angepasst, wie in bwlewis.github.io/GLM , und so kann man innerhalb jeder Iteration den regulären Schritt der kleinsten Quadrate durch einen Schritt der bestraften kleinsten Quadrate mit einem Kamm ersetzen, um einen Kamm zu erhalten, der mit GLM bestraft wird. In Kombination mit adaptiven Ridge-Strafen wird dies für die Anpassung von L0-bestraften GLM verwendet, wie im l0ara-Paket, siehe biodatamining.biomedcentral.com/articles/10.1186/… und journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers
@ TomWenseleers danke, ja, das macht völlig Sinn
Glen_b-Wiedereinsetzung Monica
0

Die Verallgemeinerung dieses Rezepts auf GLMs ist in der Tat nicht schwierig, da GLMs normalerweise unter Verwendung iterativ neu gewichteter kleinster Quadrate angepasst werden . Daher kann man innerhalb jeder Iteration den regulären gewichteten Schritt der kleinsten Quadrate durch einen Schritt der bestraften kleinsten Quadrate ersetzen, um einen bestraften Kamm-GLM zu erhalten. Tatsächlich wird dieses Rezept in Kombination mit adaptiven Ridge-Strafen verwendet, um mit L0 bestrafte GLMs (auch als beste Teilmenge bezeichnet, dh GLMs, bei denen die Gesamtzahl der Koeffizienten ungleich Null bestraft wird) anzupassen. Dies wurde zum Beispiel im l0ara-Paket implementiert , siehe dieses und dieses Dokument für Details.

Es ist auch erwähnenswert, dass die schnellste geschlossene Methode zur Lösung einer regulären Gratregression die Verwendung von ist

lmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  solve(crossprod(X) + diag(lambdas), crossprod(X, y))[, 1]
}

für den Fall, wo n>=poder mit

lmridge_solve_largep = function (X, Y, lambda) (t(X) %*% solve(tcrossprod(X)+lambda*diag(nrow(X)), Y))[,1]

wann p>nund für ein Modell ohne Intercept.

Dies ist schneller als die Verwendung des Rezepts für die Zeilenvergrößerung , dh das Ausführen

lmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  qr.solve(rbind(X, diag(sqrt(lambdas))), c(y, rep(0, ncol(X))))
}

Wenn Sie für Ihre angepassten Koeffizienten Einschränkungen hinsichtlich der Nicht-Negativität benötigen , können Sie dies einfach tun

library(nnls)

nnlmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x
}

das ergibt dann übrigens ein etwas genaueres Ergebnis als

nnlmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=rbind(X,diag(sqrt(lambdas))), b=c(Y,rep(0,ncol(X))))$x 
}

(und genau genommen nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x ist dann nur die Lösung die richtige).

Ich habe noch nicht herausgefunden, wie der Fall mit eingeschränkter Nicht-Negativität für den p > nFall weiter optimiert werden könnte - lassen Sie mich wissen, wenn jemand zufällig wissen würde, wie dies zu tun ist ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xfunktioniert nicht]

Tom Wenseleers
quelle