J'ai un ensemble de données avec 338 prédicteurs et 570 instances (impossible de télécharger malheureusement) sur lequel j'utilise le Lasso pour effectuer la sélection des fonctionnalités. En particulier, j'utilise la cv.glmnet
fonction glmnet
comme suit, où se mydata_matrix
trouve une matrice binaire 570 x 339 et la sortie est également binaire:
library(glmnet)
x_dat <- mydata_matrix[, -ncol(mydata_matrix)]
y <- mydata_matrix[, ncol(mydata_matrix)]
cvfit <- cv.glmnet(x_dat, y, family='binomial')
Ce graphique montre que l'écart le plus faible se produit lorsque toutes les variables ont été supprimées du modèle. Est-ce à dire que le simple fait d'utiliser l'interception est plus prédictif du résultat que d'utiliser même un seul prédicteur, ou ai-je fait une erreur, peut-être dans les données ou dans l'appel de fonction?
Ceci est similaire à une question précédente , mais n'a reçu aucune réponse.
plot(cvfit)
r
classification
lasso
glmnet
Stuart Lacy
la source
la source
Réponses:
Je ne pense pas que vous ayez fait une erreur dans le code. Il s'agit d'interpréter la sortie.
Le Lasso n'indique pas quels régresseurs individuels sont "plus prédictifs" que d'autres. Il a simplement une tendance intégrée à estimer les coefficients à zéro. Plus le coefficient de pénalité est élevélog(λ) est, plus cette tendance est grande.
Votre graphique de validation croisée montre qu'à mesure que de plus en plus de coefficients sont forcés à zéro, le modèle fait de mieux en mieux la prédiction de sous-ensembles de valeurs qui ont été supprimés de manière aléatoire de l'ensemble de données. Lorsque les meilleures erreurs de prédiction à validation croisée (mesurées ici comme la «déviance binomiale») sont obtenues lorsque tous les coefficients sont nuls, vous devez suspecter qu'aucune combinaison linéaire d'aucun sous-ensemble des régresseurs ne peut être utile pour prédire les résultats.
Vous pouvez le vérifier en générant des réponses aléatoires indépendantes de tous les régresseurs et en leur appliquant votre procédure d'ajustement. Voici un moyen rapide d'émuler votre jeu de données:
Le bloc de données
X
a une colonne binaire aléatoire nommée "y" et 338 autres colonnes binaires (dont les noms n'ont pas d'importance). J'ai utilisé votre approche pour régresser "y" par rapport à ces variables, mais - juste pour être prudent - je me suis assuré que le vecteur de réponsey
et la matrice du modèlex
correspondent (ce qu'ils pourraient ne pas faire en cas de valeurs manquantes dans les données) :Le résultat est remarquablement semblable au vôtre:
En effet, avec ces données complètement aléatoires, le Lasso renvoie toujours neuf estimations de coefficient non nul (même si nous savons, par construction, que les valeurs correctes sont toutes nulles). Mais il ne faut pas s'attendre à la perfection. De plus, comme l'ajustement est basé sur la suppression aléatoire de sous-ensembles de données pour la validation croisée, vous n'obtiendrez généralement pas la même sortie d'une exécution à l'autre. Dans cet exemple, un deuxième appel à
cv.glmnet
produit un ajustement avec un seul coefficient non nul. Pour cette raison, si vous avez le temps, c'est toujours une bonne idée de relancer la procédure d'ajustement plusieurs fois et de garder une trace des estimations de coefficient qui sont systématiquement non nulles. Pour ces données - avec des centaines de régresseurs - cela prendra quelques minutes pour répéter neuf fois de plus.Huit de ces régresseurs ont des estimations non nulles dans environ la moitié des ajustements; les autres n'ont jamais d'estimations non nulles. Cela montre dans quelle mesure le Lasso inclura toujours des estimations de coefficient non nul même lorsque les coefficients eux-mêmes sont vraiment nuls.
la source
Si vous souhaitez obtenir plus d'informations, utilisez la fonction
Le graphique doit être similaire à Les étiquettes permettent d'identifier l'effet du lambda pour les régresseurs.
Pouvez-vous utiliser différentes valeurs de x (dans le modèle est appelé facteur alpha) à 0 (régression de crête) à 1 (régression LASSO). La valeur [0,1] est la régression nette élastique
la source
La réponse selon laquelle il n'y a pas de combinaisons linéaires de variables utiles pour prédire les résultats est vraie dans certains cas, mais pas dans tous.
J'avais un tracé comme celui ci-dessus qui était causé par la multicolinéarité dans mes données. La réduction des corrélations a permis à Lasso de fonctionner, mais elle a également supprimé des informations utiles sur les résultats. De meilleurs ensembles de variables ont été obtenus en utilisant l'importance de la forêt aléatoire pour filtrer les variables, puis en utilisant Lasso.
la source
C'est possible mais un peu surprenant. LASSO peut faire des choses étranges lorsque vous avez une colinéarité, auquel cas vous devez probablement définir alpha <1 afin que vous ajustiez un filet élastique à la place. Vous pouvez choisir l'alpha par validation croisée, mais assurez-vous d'utiliser les mêmes plis pour chaque valeur d'alpha.
la source