Ich verwende glmnet, um Schätzungen der Gratregression zu berechnen. Ich habe einige Ergebnisse erhalten, die mich misstrauisch gemacht haben, dass glmnet wirklich das tut, was ich denke, dass es tut. Um dies zu überprüfen, habe ich ein einfaches R-Skript geschrieben, in dem ich das Ergebnis der von solve durchgeführten Ridge-Regression mit dem in glmnet vergleiche. Der Unterschied ist signifikant:
n <- 1000
p. <- 100
X. <- matrix(rnorm(n*p,0,1),n,p)
beta <- rnorm(p,0,1)
Y <- X%*%beta+rnorm(n,0,0.5)
beta1 <- solve(t(X)%*%X+5*diag(p),t(X)%*%Y)
beta2 <- glmnet(X,Y, alpha=0, lambda=10, intercept=FALSE, standardize=FALSE,
family="gaussian")$beta@x
beta1-beta2
Die Norm der Differenz liegt normalerweise bei 20, was nicht an numerisch unterschiedlichen Algorithmen liegen kann. Ich muss etwas falsch machen. Welche Einstellungen muss ich vornehmen glmnet
, um das gleiche Ergebnis wie bei Ridge zu erzielen?
r
ridge-regression
glmnet
John
quelle
quelle
Antworten:
Der Unterschied, den Sie beobachten, beruht auf der zusätzlichen Division durch die Anzahl der Beobachtungen, N, die GLMNET in ihrer objektiven Funktion verwendet, und der impliziten Standardisierung von Y durch seine Standardabweichung, wie unten gezeigt.
wo wir anstelle von für , 1 / ( n - 1 ) s y s y = ∑ i ( y i - ˉ y ) 21/n 1/(n−1) sy
Indem Sie in Bezug auf Beta unterscheiden und die Gleichung auf Null setzen,
Wenn wir nach Beta suchen, erhalten wir die Schätzung,
Um die Schätzungen (und die entsprechenden Strafen) für die ursprüngliche Metrik von Y wiederherzustellen, multipliziert GLMNET sowohl die Schätzungen als auch die mit und gibt diese Ergebnisse an den Benutzer zurück.sy
& lgr;unstd. =syλ
Vergleichen Sie diese Lösung mit der Standardableitung der Gratregression.
Beachten Sie, dass um einen zusätzlichen Faktor von N skaliert wird. Wenn wir die Funktion oder verwenden, wird die Strafe implizit um skaliert . Das heißt, wenn wir diese Funktionen verwenden, um die Koeffizientenschätzungen für ein , erhalten wir effektiv Schätzungen für .1 / s y λ ∗ λ = λ ∗ / s yλ 1 / sy λ∗ λ = λ∗/ sy
predict()
coef()
Basierend auf diesen Beobachtungen muss die in GLMNET verwendete Strafe mit einem Faktor von skaliert werden .sy/ N
Die Ergebnisse verallgemeinern sich auf die Einbeziehung eines Abschnitts und standardisierter X-Variablen. Wir modifizieren eine standardisierte X-Matrix so, dass sie eine Spalte mit Einsen enthält, und die diagonale Matrix, dass sie an der Position [1,1] einen zusätzlichen Null-Eintrag aufweist (dh den Achsenabschnitt nicht benachteiligen). Sie können dann die Schätzungen anhand der jeweiligen Standardabweichungen der Stichprobe dekomprimieren (stellen Sie erneut sicher, dass Sie 1 / n verwenden, wenn Sie die Standardabweichung berechnen).
Code hinzugefügt, um standardisiertes X ohne Intercept anzuzeigen:
quelle
Nach https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html , wenn die Familie ist
gaussian
,glmnet()
sollte minimierenWennx λ
glmnet(x, y, alpha=1)
das Lasso mit den Spalten in standardisiert angepasst wird, ist die Lösung für die gemeldete Strafe die Lösung zum Minimieren von Zumindest bei der Anpassung an die Gratregression ist die Lösung für eine gemeldete Strafe jedoch die Lösung zum Minimieren von Dabei ist die Standardabweichung von . Hier sollte die Strafe als .glmnet_2.0-13
glmnet(x, y, alpha=0)
Was passieren könnte, ist, dass die Funktion zuerst zu standardisiert und dann minimiert. was effektiv minimieren soll oder äquivalent, um zu minimiereny y0
Für das Lasso ( ) ist es sinnvoll , zurück zu skalieren , um die Strafe als zu melden . Dann gilt für alle , hat als Strafe gemeldet werden Kontinuität der Ergebnisse über halten . Dies ist wahrscheinlich die Ursache des obigen Problems. Dies ist teilweise auf die Verwendung von (2) zur Lösung von (1) zurückzuführen. Nur wenn oder gibt es eine gewisse Äquivalenz zwischen den Problemen (1) und (2) (dh eine Entsprechung zwischen dem in (1) und dem in (2)). Für jedes andere& eegr; & eegr; s y α & eegr; s y α α = 0 α = 1 & lgr; & eegr; α ∈ ( 0 , 1 ) & lgr; & eegr;α=1 η ηsy α ηsy α α=0 α=1 λ η α∈(0,1) sind die Probleme (1) und (2) zwei verschiedene Optimierungsprobleme, und es gibt keine Eins-zu-Eins-Entsprechung zwischen dem in (1) und dem in (2).λ η
quelle