Étant donné , quel est le comportement théorique des coefficients LASSO et pourquoi?
Est-ce que l'un des ou se à ou les deux?
require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)
#3 x 1 sparse Matrix of class "dgCMatrix"
# 1
#(Intercept) 1.057426e+02
#x1 9.680073e+01
#x2 3.122502e-15
lasso
multicollinearity
John Hass
la source
la source
y = 100*x1 + 100 + runif(100)
, sinon vous obtenez un seul nombre aléatoire qui est recyclé et ajouté uniformément à toutes les autres entrées.Réponses:
Notez que
Pour toute valeur fixe du coefficient , la pénalitéest minimisé lorsque . En effet, la pénalité sur est deux fois plus pondérée! Pour mettre cela en notation,satisfait pour tout . Par conséquent, l'estimateur au lassoβ1+2β2 |β1|+|β2| β1=0 β1
Comme l'a souligné Firebug, la raison pour laquelle votre simulation montre un résultat contradictoire est qu'elle metx1=x2 (100,0) (0,100) (a,b) argmin a,b≥0 a+b=100
glmnet
automatiquement à l'échelle la variance unitaire des fonctionnalités. Autrement dit, en raison de l'utilisation deglmnet
, nous sommes effectivement dans le cas où . Là, l'estimateur n'est plus unique: et sont tous deux dans l'arg min. En effet, est dans le pour tout tel que .Cela explique pourquoi la simulation a trouvé en particulier. En effet, le deuxième coefficient sera toujours nul, quel que soit l'ordre des caractéristiques.β^2=0
Preuve: supposons WLOG que la fonctionnalité satisfait . La descente de coordonnées (l'algorithme utilisé par ) calcule pour sa première itération: suivi de où . Alors, puisquex∈Rn ∥x∥2=1
glmnet
glmnet
la source
glmnet
la mise à l'échelle des fonctionnalités est activée par défaut, je suis presque sûr. Donc et deviennent les mêmes dans le modèle.ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Lorsque je réexécute votre code, j'obtiens que le coefficient de est numériquement impossible à distinguer de zéro.x2
Pour mieux comprendre pourquoi LASSO définit ce coefficient à zéro, vous devez examiner la relation entre LASSO et la régression du moindre angle (LAR). LASSO peut être considéré comme un LAR avec une modification spéciale.
L'algorithme de LAR est à peu près comme ceci: Commencez avec un modèle vide (sauf pour une interception). Ajoutez ensuite la variable prédictive la plus corrélée à , disons . le coefficient de ce prédicteur , jusqu'à ce que le résiduel soit également corrélé avec et une autre variable de prédicteur . ensuite les coefficients de et jusqu'à ce qu'un troisième prédicteur soit également corrélé avec le résiduel et ainsi de suite.y xj βj y−c−xjβj xj xk xj xk xl y−c−xjβj−xkβk
LASSO peut être considéré comme LAR avec la torsion suivante: dès que le coefficient d'un prédicteur dans votre modèle (un prédicteur "actif") atteint zéro, supprimez ce prédicteur du modèle. C'est ce qui se produit lorsque vous régressez sur les prédicteurs colinéaires: les deux seront ajoutés au modèle en même temps et, à mesure que leurs coefficients seront modifiés, leur corrélation respective avec les résidus changera proportionnellement, mais l'un des prédicteurs sera supprimé de l'ensemble actif car il atteint zéro en premier. Quant à savoir lequel des deux prédicteurs colinéaires ce sera, je ne sais pas. [EDIT: Lorsque vous inversez l'ordre de et , vous pouvez voir que le coefficient dey x1 x2 x1 est mis à zéro. Ainsi, l'algorithme glmnet semble simplement mettre d'abord à zéro ces coefficients qui sont ordonnés plus tard dans la matrice de conception.]
Une source qui explique ces choses plus en détail est le chapitre 3 dans "Les éléments de l'apprentissage statistique" de Friedman, Hastie et Tibshirani.
la source