Si la multi-colinéarité est élevée, les coefficients LASSO diminueraient-ils à 0?

9

Étant donné , quel est le comportement théorique des coefficients LASSO et pourquoi?x2=2x1

Est-ce que l'un des ou se à ou les deux?x1x20

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
John Hass
la source
2
Je ne sais pas si c'est une bonne simulation car les deux coefficients sont en fait nuls. C'est un peu plus intéressant de regarder le comportement des estimations des coefficients quand il y a une vraie relation.
dsaxton
1
Amélioration de la simulation. Je fournis la simulation parce que je veux expliquer quelle est ma question. Je ne m'intéresse qu'aux résultats théoriques de cette question.
John Hass
1
Je pense que le comportement sera imprévisible car le modèle n'est pas identifiable. Autrement dit, comment la procédure d'ajustement de modèle peut-elle savoir, par exemple, que et plutôt que et ? Cela ne peut pas, car l'un ou l'autre est "correct". β1=100β2=0β1=0β2=50
dsaxton
Je suis d'accord avec votre raisonnement. Existe-t-il une manière mathématique de le décrire?
John Hass
1
Je pense que vous vouliez dire 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.
Firebug

Réponses:

8

Notez que

yXβ22+λβ1=yβ1x1β2x222+λ(|β1|+|β2|)=y(β1+2β2)x122+λ(|β1|+|β2|).

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

β~=argminβ:β1+2β2=K|β1|+|β2|
β~1=0K
β^=argminβRpyXβ22+λβ1=argminβRpy(β1+2β2)x122+λ(|β1|+|β2|)=argβminKRminβRp:β1+2β2=KyKx122+λ(|β1|+|β2|)=argβminKR{yKx122+λminβRp:β1+2β2=K{(|β1|+|β2|)}}
satisfait . La raison pour laquelle les commentaires à la question de OP sont trompeurs est qu'il y a une pénalité sur le modèle: ceuxβ^1=0(0,50)et coefficients donnent la même erreur, mais une norme différente ! De plus, il n'est pas nécessaire de regarder quoi que ce soit comme les LAR: ce résultat découle immédiatement des premiers principes.(100,0)1

Comme l'a souligné Firebug, la raison pour laquelle votre simulation montre un résultat contradictoire est qu'elle met glmnetautomatiquement à l'échelle la variance unitaire des fonctionnalités. Autrement dit, en raison de l'utilisation de glmnet, 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 .x1=x2(100,0)(0,100)(a,b)argmina,b0a+b=100

Dans ce cas de caractéristiques égales, glmnetconvergera en une seule itération: il seuil doucement le premier coefficient, puis le deuxième coefficient est mis à zéro par seuil doux.

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, puisquexRnx2=1glmnet

β^1(1)=Sλ(xTy)
β^2(1)=Sλ[xT(yxSλ(xTy))]=Sλ[xTyxTx(xTy+T)]=Sλ[T]=0,
T={λ if xTy>λλ if xTy<λ0 otherwiseβ^2(1)=0, la deuxième itération de la descente de coordonnées répétera les calculs ci-dessus. Inductivement, nous voyons que pour toutes les itérations et . Par conséquent , rapportera et puisque le critère d'arrêt est immédiatement atteint.β^j(i)=β^j(i)ij{1,2}glmnetβ^1=β^1(1)β^2=β^2(1)
user795305
la source
2
glmnetla 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. x1x2
Firebug
2
Essayez ceci à la place: ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Firebug
2
Ça y est! Excellente réflexion, @Firebug! Maintenant, le coefficient de devient en effet estimé à zéro. Merci d'avoir partagé vos idées! x1
user795305
3

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.yxjβjycxjβjxjxkxjxkxlycxjβjxkβ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 deyx1x2x1est 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.

Matthias Schmidtblaicher
la source