Je me demande comment aborder correctement la formation et le test d'un modèle LASSO à l'aide de glmnet dans R?
- Plus précisément, je me demande comment procéder si l'absence d'un ensemble de données de test externe nécessite que j'utilise la validation croisée (ou une autre approche similaire) pour tester mon modèle LASSO.
Permettez-moi de décomposer mon scénario:
Je n'ai qu'un seul ensemble de données pour informer et former mon modèle glmnet. En conséquence, je devrai utiliser la validation croisée pour fractionner mes données et générer également un moyen de tester mon modèle.
J'utilise déjà cv.glmnet
, qui selon les détails du paquet :
Effectue une validation croisée k-fold pour glmnet, produit un tracé et renvoie une valeur pour lambda.
La validation croisée est-elle effectuée
cv.glmnet
simplement pour sélectionner la meilleure lambda, ou sert-elle également de procédure de validation croisée plus générale?- En d'autres termes, dois-je encore effectuer une autre étape de validation croisée pour «tester» mon modèle?
Je travaille avec l'hypothèse que "oui je le fais".
Cela étant, comment aborder la validation croisée de mon cv.glmnet
modèle?
Dois-je le faire manuellement ou la
caret
fonction est-elle utile pour les modèles glmnet?Dois-je utiliser deux "boucles" concentriques de validation croisée? ... Dois-je utiliser une "boucle interne" de CV via
cv.glmnet
pour déterminer la meilleure valeur lambda dans chacun des k plis d'une "boucle externe" de traitement de validation croisée k-fold ?Si je fais une validation croisée de mon
cv.glmnet
modèle déjà à validation croisée , comment puis-je isoler le "meilleur" modèle (de la "meilleure" valeur lambda) de chaquecv.glmnet
modèle dans chaque pli de ma "boucle externe" de validation croisée autrement?- Remarque: Je définis le "meilleur" modèle comme le modèle associé à un lambda qui produit un MSE à 1 SE du minimum ... c'est le
$lambda.1se
dans lecv.glmnet
modèle.
- Remarque: Je définis le "meilleur" modèle comme le modèle associé à un lambda qui produit un MSE à 1 SE du minimum ... c'est le
Le contexte:
J'essaie de prédire l'âge de l'arbre ("âge") en fonction du diamètre de l'arbre ("D"), de D ^ 2 et des espèces ("facteur (SPEC)"). [équation résultante: Age ~ D + factor(SPEC) + D^2
]. J'ai environ 50 000 lignes de données, mais les données sont longitudinales (suivent les individus dans le temps) et se composent d'environ 65 espèces.
la source
Réponses:
La validation croisée est-elle effectuée dans cv.glmnet simplement pour sélectionner la meilleure lambda, ou sert-elle également de procédure de validation croisée plus générale?
Il fait presque tout le nécessaire dans une validation croisée. Par exemple, il ajuste les
lambda
valeurs possibles sur les données, choisit le meilleur modèle et forme finalement le modèle avec les paramètres appropriés.Par exemple, dans l'objet renvoyé ::
cvm
est l'erreur moyenne à validation croisée.cvsd
est l'écart type estimé.Comme les autres valeurs renvoyées, celles-ci sont calculées sur l'ensemble de test. Finalement, le
glmnet.fit
donne au modèle formé sur toutes les données (formation + test) avec les meilleurs paramètres.Dois-je le faire manuellement ou la fonction caret est-elle utile pour les modèles glmnet?
Vous n'avez pas besoin de le faire manuellement. 'Caret' serait très utile, et est l'un de mes packages préférés car il fonctionne pour tous les autres modèles avec la même syntaxe. J'utilise moi-même souvent
caret
plutôt quecv.glmnet
. Cependant, dans votre scénario, c'est essentiellement la même chose.Dois-je utiliser deux "boucles" concentriques de validation croisée? ... Dois-je utiliser une "boucle intérieure" de CV via cv.glmnet pour déterminer la meilleure valeur lambda dans chacun des k plis d'une "boucle externe" de k-pli traitement de validation croisée?
Vous pouvez le faire et ce concept est très similaire à l'idée de la validation croisée imbriquée. La validation croisée imbriquée pour la sélection de modèle .
Si je fais une validation croisée de mon modèle cv.glmnet déjà validé, comment puis-je isoler le "meilleur" modèle (de la "meilleure" valeur lambda) de chaque modèle cv.glmnet dans chaque pli de ma boucle externe autrement " "de validation croisée?
Exécutez simplement une boucle où vous générez des données d'entraînement et des données de test exécutées
cv.glmnet
sur les données d'entraînement et utilisez le modèleglmnet.fit
pour prédire les données de test.la source
cv.glmnet
fonction commeR
c'est open source . Tapez simplementcv.glmnet
dans la console.