Yo estoy usando el siguiente código con glmnet:

> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')

Llegar glmnet coeficientes a 'mejor' lambda

Sin embargo, quiero imprimir los coeficientes en el mejor de Lambda, como se hace en la cresta de la regresión. Veo siguiente estructura de ajuste:

> 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"

Pero no soy capaz de obtener el mejor Lambda y los correspondientes coeficientes. Gracias por tu ayuda.

Usted está utilizando el valor predeterminado de la lambda de la secuencia, que está construido utilizando nlambda,lambda.min.ratio. El consejo que siempre escuché fue a pasar su propio lambda secuencia, por ejemplo, lambda = 10^seq(10,-15,1/3) o similar.
tienes un error en tu ejemplo. La muestra debe estar en el parámetro por ejemplo, lambda = 10^seq(from=-10, to=15, by=1/3)

OriginalEl autor rnso | 2015-06-01

2 Comentarios

  1. 14

    Intente esto:

    fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1], 
    lambda=cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
    coef(fit)

    O puede especificar especificar un valor lambda en coef:

    fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
    coef(fit, s = cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)

    Usted necesita escoger un «mejor» lambda, y lambda.1se es razonable o justificable, uno para elegir. Pero podrías usar cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min o cualquier otro valor de lambda que se posan sobre como «lo mejor» para usted.

    registro de lambda.min de cv.glmnet viene a -0.5. Es correcto que si me marca este punto en el eje x de la parcela(fit) de glmnet arriba? El registro de lambda indica en el eje x de la parcela que es desde el mismo vector de donde lambda.min ha llegado?
    El registro de lambda en el eje x es de la misma vector de valores de lambda que lambda.min vino. Acaba de ser conscientes de que debido a la naturaleza de la validación cruzada, se pueden obtener diferentes valores para lambda.min si ejecuta cv.glmnet de nuevo. Así, su marca en el eje x sería el lambda.min de una llamada en particular de cv.glmnet.
    Una cosa a tener en cuenta, como Frank dice que habrá algunos (o muchos) de la variación en el mínimo lambda si vuelve a ejecutar la validación cruzada. ?cv.glmnet peticiones con ` tenga en cuenta también que los resultados de cv.glmnet son al azar, ya que los pliegues son seleccionados al azar. Los usuarios pueden reducir esta aleatoriedad mediante la ejecución de cv.glmnet muchas veces, y el promedio de las curvas de error.`. Vuelvo a ejecutar el cv 100 veces y el promedio de las curvas y, a continuación, encontrar el mínimo de la media de la curva (o 1se si prefiere).
    Tal vez pidiendo en la Cruz Validado es una buena idea? Yo diría que tu idea suena razonable, pero también quiero decir que la «mejor práctica» puede depender de tus objetivos. Usted va para la parsimonia? poder predictivo? selección de la función?
    yo lo que hago es usar una semilla aleatoria: pero el uso de un lazo externo de modo que el cv es ejecutar varias (N) veces. Esto produce N lambda por mse curvas . Entonces yo el promedio de los N ms’se a través de las curvas en cada lambda . A continuación, encontrar la expresión lambda que minimiza este promedio de mse.

    OriginalEl autor Jota

  2. -2

    boxcox(){MASS} proporciona una máxima verosimilitud de la trama, mostrando
    la cual el valor de l proporciona el mejor ajuste de un modelo lineal

    boxcox(lm.fit) proporciona la máxima verosimilitud de la trama para un
    amplia gama de l en el modelo lineal

    lm.fit coger la l con la
    mayor ML valor

    boxcox(lm.fit,lambda=seq(-0.1, 0.1, 0.01)) si, por
    ejemplo, el más alto de la l es de alrededor de 0.04, obtener un zoom a la trama alrededor de
    que el área de

    En el ejemplo, la función proporciona una parcela entre l =-
    0.1 y 0.1 en incrementos de 0.01.

    OriginalEl autor M.C. Evans

Dejar respuesta

Please enter your comment!
Please enter your name here