Immer glmnet Koeffizienten am 'besten' lambda
Verwende ich folgenden code mit glmnet:
> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')
Jedoch, ich wollen, drucken Sie die Koeffizienten am besten Lambda, wie es getan wird, ridge-regression. Ich sehe folgende Struktur Passform:
> str(fit)
List of 12
$ a0 : Named num [1:79] 20.1 21.6 23.2 24.7 26 ...
..- attr(*, "names")= chr [1:79] "s0" "s1" "s2" "s3" ...
$ beta :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. ..@ i : int [1:561] 0 4 0 4 0 4 0 4 0 4 ...
.. ..@ p : int [1:80] 0 0 2 4 6 8 10 12 14 16 ...
.. ..@ Dim : int [1:2] 10 79
.. ..@ Dimnames:List of 2
.. .. ..$ : chr [1:10] "cyl" "disp" "hp" "drat" ...
.. .. ..$ : chr [1:79] "s0" "s1" "s2" "s3" ...
.. ..@ x : num [1:561] -0.0119 -0.4578 -0.1448 -0.7006 -0.2659 ...
.. ..@ factors : list()
$ df : int [1:79] 0 2 2 2 2 2 2 2 2 3 ...
$ dim : int [1:2] 10 79
$ lambda : num [1:79] 5.15 4.69 4.27 3.89 3.55 ...
$ dev.ratio: num [1:79] 0 0.129 0.248 0.347 0.429 ...
$ nulldev : num 1126
$ npasses : int 1226
$ jerr : int 0
$ offset : logi FALSE
$ call : language glmnet(x = as.matrix(mtcars[-1]), y = mtcars[, 1])
$ nobs : int 32
- attr(*, "class")= chr [1:2] "elnet" "glmnet"
Aber ich bin nicht in der Lage zu Holen Sie sich die besten Lambda-und den entsprechenden Koeffizienten. Vielen Dank für Ihre Hilfe.
Sie sind mit dem Standard-lambda-Sequenz, die aufgebaut ist mit
Sie haben einen Tippfehler in deinem Beispiel. Das Zeichen sollte auf der aus-parameter, z.B.
nlambda,lambda.min.ratio
. Der Rat, den ich immer hörte war, an Ihre eigene lambda-Sequenz, z.B. lambda = 10^seq(10,-15,1/3)
oder ähnliches.Sie haben einen Tippfehler in deinem Beispiel. Das Zeichen sollte auf der aus-parameter, z.B.
lambda = 10^seq(from=-10, to=15, by=1/3)
InformationsquelleAutor rnso | 2015-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Oder Sie geben ein geben Sie einen lambda-Wert in
coef
:Müssen Sie wählen Sie einen "besten" lambda-und
lambda.1se
ist ein angemessener, oder vertretbar, eine zu Holen. Aber man könntecv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min
oder jeder andere Wert von lambda, dass Sie sich auf "best" für Sie.Die log-lambda auf der x-Achse, die aus dem gleichen Vektor, der die lambda-Werte, die lambda.min kam. Just bewusst sein, dass aufgrund der Art der Kreuzvalidierung, können Sie unterschiedliche Werte für
lambda.min
wenn Siecv.glmnet
wieder. So, Ihre Marke auf der x-Achse wäre dielambda.min
von einem bestimmten call ofcv.glmnet
.Eine Sache zu beachten, wie Frank sagt, es wird einige (oder viele) der variation in der minimalen lambda, wenn Sie erneut die cross-Validierung.
?cv.glmnet
aufgefordert mit ` Beachten Sie auch, dass die Ergebnisse der cv.glmnet sind zufällig, da die Falten werden nach dem Zufallsprinzip ausgewählt. Benutzer können reduzieren diese Zufälligkeit durch die Ausführung cv.glmnet viele Male, und die Mittelung der Fehler Kurven.`. Ich erneut den Lebenslauf 100 mal und Durchschnitt die Kurven und dann finden Sie das minimum der Durchschnitts-Kurve (oder 1se, wenn Sie bevorzugen).Vielleicht stellst du auf Cross-Validiert ist eine gute Idee? Ich würde sagen, deine Idee klingt vernünftig, aber ich würde auch sagen "best practice" kann abhängen auf Ihre Ziele. Sie gehen für Sparsamkeit? Vorhersagekraft? feature-Auswahl?
was ich tun ist verwenden Sie eine zufällige Streuung: aber verwenden Sie eine äußere Schleife, so dass der Lebenslauf ist die Ausführung mehrerer (N) Zeit. Dies erzeugt N lambda von mse-Kurven . Dann habe ich den Durchschnitt der N ms ' se über die Kurven an jeder lambda-Ausdruck . Dann finden die lambda minimiert, dass diese gemittelten mse.
InformationsquelleAutor
boxcox(){MASS}
bietet ein maximum-likelihood-plot zeigtdem Wert von l bietet die beste Passform in einem linearen Modell
boxcox(lm.fit)
liefert die maximum-likelihood plot für einenbreites Spektrum von l ist in das lineare Modell
lm.fit
Holen die l mit derhöchsten ML Wert
boxcox(lm.fit,lambda=seq(-0.1, 0.1, 0.01))
wenn, fürBeispiel, die höchste l ist um 0.04, erhalten Sie eine vergrößerte Grafik in einem plot um
das Gebiet
In dem Beispiel die Funktion stellt ein Grundstück zwischen l =-
0.1 und 0.1 in 0.01-Schritten.
InformationsquelleAutor