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.glmnet
simplemente 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.glmnet
modelo?
¿Tengo que hacerlo manualmente o tal vez la
caret
función sea útil para los modelos glmnet?¿Utilizo dos "bucles" concéntricos de validación cruzada? ... ¿Utilizo un "bucle interno" de CV
cv.glmnet
para 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.glmnet
modelo de validación cruzada , ¿cómo aíslo el "mejor" modelo (del "mejor" valor lambda) de cadacv.glmnet
modelo 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.1se
elcv.glmnet
modelo.
- 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
lambda
valores posibles en los datos, elige el mejor modelo y finalmente entrena el modelo con los parámetros apropiados.Por ejemplo, en el objeto devuelto ::
cvm
es el error medio de validación cruzada.cvsd
es la desviación estándar estimada.Al igual que otros valores devueltos, estos se calculan en el conjunto de prueba. Finalmente, el
glmnet.fit
da 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
caret
lugar 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.glmnet
en datos de entrenamiento y use el modeloglmnet.fit
para predecir sobre los datos de prueba.fuente
cv.glmnet
función comoR
es opensource. Simplemente escribacv.glmnet
en la consola.