Me pregunto cómo abordar adecuadamente el entrenamiento y la prueba de un modelo LASSO usando glmnet en R.
- Específicamente, me pregunto cómo hacerlo si la falta de un conjunto de datos de prueba externo requiere el uso de validación cruzada (u otro enfoque similar) para probar mi modelo LASSO.
Déjame analizar mi escenario:
Solo tengo un conjunto de datos para informar y entrenar mi modelo glmnet. Como resultado, tendré que usar la validación cruzada para dividir mis datos para generar también una forma de probar mi modelo.
Ya estoy usando cv.glmnet, que de acuerdo con los detalles del paquete :
Hace k-fold validación cruzada para glmnet, produce un gráfico y devuelve un valor para lambda.
- ¿La validación cruzada se realiza - cv.glmnetsimplemente para elegir la mejor lambda, o también sirve como un procedimiento de validación cruzada más general?- En otras palabras, ¿todavía necesito hacer otro paso de validación cruzada para "probar" mi modelo?
 
Estoy trabajando con la suposición de que "sí, lo hago".
Siendo ese el caso, ¿cómo me acerco a la validación cruzada de mi cv.glmnetmodelo?
- ¿Tengo que hacerlo manualmente o tal vez la - caretfunción sea útil para los modelos glmnet?
- ¿Utilizo dos "bucles" concéntricos de validación cruzada? ... ¿Utilizo un "bucle interno" de CV - cv.glmnetpara determinar el mejor valor lambda dentro de cada uno de los k pliegues de un "bucle externo" del proceso de validación cruzada k-fold ?- Si hago una validación cruzada de mi - cv.glmnetmodelo de validación cruzada , ¿cómo aíslo el "mejor" modelo (del "mejor" valor lambda) de cada- cv.glmnetmodelo dentro de cada pliegue de mi "lazo externo" de validación cruzada?- Nota: Estoy definiendo el "mejor" modelo como el modelo asociado con una lambda que produce un MSE dentro de 1 SE del mínimo ... este es $lambda.1seelcv.glmnetmodelo.
 
- Nota: Estoy definiendo el "mejor" modelo como el modelo asociado con una lambda que produce un MSE dentro de 1 SE del mínimo ... este es 
 
Contexto:
Estoy tratando de predecir la edad del árbol ("edad") en función del diámetro del árbol ("D"), D ^ 2 y la especie ("factor (SPEC)"). [ecuación resultante: Age ~ D + factor(SPEC) + D^2]. Tengo ~ 50K filas de datos, pero los datos son longitudinales (rastrea individuos a lo largo del tiempo) y consta de ~ 65 especies.
fuente

Respuestas:
¿La validación cruzada se realiza en cv.glmnet simplemente para elegir el mejor lambda, o también sirve como un procedimiento de validación cruzada más general?
Hace casi todo lo necesario en una validación cruzada. Por ejemplo, ajusta los
lambdavalores posibles en los datos, elige el mejor modelo y finalmente entrena el modelo con los parámetros apropiados.Por ejemplo, en el objeto devuelto ::
cvmes el error medio de validación cruzada.cvsdes la desviación estándar estimada.Al igual que otros valores devueltos, estos se calculan en el conjunto de prueba. Finalmente, el
glmnet.fitda el modelo entrenado en todos los datos (entrenamiento + prueba) con los mejores parámetros.¿Tengo que hacerlo manualmente o tal vez la función de intercalación sea útil para los modelos glmnet?
No necesita hacer esto manualmente. 'Caret' sería muy útil, y es uno de mis paquetes favoritos porque funciona para todos los demás modelos con la misma sintaxis. Yo mismo uso a menudo en
caretlugar decv.glmnet. Sin embargo, en su escenario es esencialmente lo mismo.¿Utilizo dos "bucles" concéntricos de validación cruzada? ... ¿Utilizo un "bucle interno" de CV a través de cv.glmnet para determinar el mejor valor lambda dentro de cada uno de los k pliegues de un "bucle externo" de k-fold procesamiento de validación cruzada?
Podría hacer esto y este concepto es muy similar a la idea de validación cruzada anidada. Validación cruzada anidada para la selección del modelo .
Si hago la validación cruzada de mi modelo cv.glmnet que ya está validando, ¿cómo aíslo el "mejor" modelo (del "mejor" valor lambda) de cada modelo cv.glmnet dentro de cada pliegue de mi bucle externo? "de validación cruzada?
Simplemente ejecute un bucle donde genere datos de entrenamiento y datos de prueba ejecutados
cv.glmneten datos de entrenamiento y use el modeloglmnet.fitpara predecir sobre los datos de prueba.fuente
cv.glmnetfunción comoRes opensource. Simplemente escribacv.glmneten la consola.