La fonction R cv.glm (bibliothèque: boot) calcule l'erreur de prédiction de validation croisée K-fold estimée pour les modèles linéaires généralisés et renvoie delta. Est-il judicieux d'utiliser cette fonction pour une régression au lasso (bibliothèque: glmnet) et si oui, comment peut-elle être réalisée? La bibliothèque glmnet utilise une validation croisée pour obtenir le meilleur paramètre de rotation, mais je n'ai trouvé aucun exemple de validation croisée de l'équation glmnet finale.
r
regression
cross-validation
lasso
glmnet
kalakaru
la source
la source
Réponses:
Un exemple sur la façon de faire la vanille validation croisée simple pour Lasso
glmnet
surmtcars
ensemble de données.Charger l'ensemble de données.
Préparer des entités (variables indépendantes). Ils devraient être de
matrix
classe. La façon la plus simple de convertirdf
des variables catégorielles contenantmatrix
est viamodel.matrix
. Remarquez que, par défaut, elleglmnet
s'adapte à l'interception, il vaut donc mieux supprimer l'interception de la matrice du modèle.Préparez la réponse (variable dépendante). Codons les voitures avec une
mpg
efficacité supérieure à la moyenne ('1') et les autres comme inefficaces ('0'). Convertissez cette variable en facteur.Exécutez la validation croisée via
cv.glmnet
. Il reprendraalpha=1
desglmnet
paramètres par défaut , ce que vous avez demandé: régression lasso.En examinant les résultats de la validation croisée, vous pourriez être intéressé par au moins 2 informations:
lambda, qui minimise l'erreur de validation croisée.
glmnet
fournit en fait 2 lambdas:lambda.min
etlambda.1se
. C'est votre jugement en tant que statisticien pratiquant à utiliser.coefficients régularisés résultants.
Veuillez voir le code R selon les instructions ci-dessus:
Commentaires finaux:
notez, la sortie du modèle ne dit rien sur la signification statistique des coefficients, seulement des valeurs.
Le pénalisant l1 (lasso), que vous avez demandé, est connu pour son instabilité, comme en témoignent ce billet de blog et cette question d' échange de pile . Une meilleure façon pourrait également être de procéder à une validation croisée
alpha
, ce qui vous permettrait de choisir le bon mélange de pénalisants l1 et l2.une autre façon de faire la validation croisée pourrait être de se tourner vers le curseur
train( ... method='glmnet')
et enfin, la meilleure façon d'en savoir plus
cv.glmnet
et ses valeurs par défautglmnet
est bien sûr?glmnet
dans la console de R)))la source