Régression linéaire multivariée avec lasso en r


9

J'essaie de créer un modèle réduit pour prédire de nombreuses variables dépendantes (DV) (~ 450) qui sont hautement corrélées.

Mes variables indépendantes (IV) sont également nombreuses (~ 2000) et fortement corrélées.

Si j'utilise le lasso pour sélectionner un modèle réduit pour chaque sortie individuellement, je ne suis pas assuré d'obtenir le même sous-ensemble de variables indépendantes que je boucle sur chaque variable dépendante.

Existe-t-il une régression linéaire multivariée qui utilise le lasso dans R?

Ce n'est pas du lasso de groupe. lasso de groupe regroupe le IV. Je veux une régression linéaire multivariée (ce qui signifie que le DV est une matrice, pas un vecteur de scalaires), qui implémente également le lasso. (Remarque: comme le souligne la NRH, ce n'est pas vrai. Le lasso de groupe est un terme général qui inclut des stratégies qui regroupent le IV, mais également des stratégies qui regroupent d'autres paramètres tels que le DV)

J'ai trouvé ce document qui entre dans quelque chose appelé Lasso à superposition clairsemée Lasso

Voici un code qui fait une régression linéaire multivariée

> dim(target)
[1] 6060  441
> dim(dictionary)
[1] 6060 2030
> fit = lm(target~dictionary)

Voici un code qui fait du lasso sur un seul DV

> fit = glmnet(dictionary, target[,1])

Et voici ce que je voudrais faire:

> fit = glmnet(dictionary, target)
Error in weighted.mean.default(y, weights) : 
  'x' and 'w' must have the same length

Sélection de fonctionnalités adaptées à TOUTES les cibles à la fois


On ne sait pas exactement ce que vous demandez, sauf sur le dernier point. Le package est appelé glmnetet il a une vignette complète.
generic_user

Qu'entendez-vous par "à chaque fois"? Exécutez-vous cela sur des sous-ensembles de vos données? Validation croisée? Différents échantillons?
shadowtalker

À chaque fois, je veux dire que je suis en train d'exécuter glmnet sur une seule variable dépendante à la fois, et de les parcourir tous
kmace

Ou en d'autres termes, mon y est toujours un vecteur, pas une matrice
kmace

1
@Firebug absolument. Je ne savais pas que le terme était plus général. Désolé
kmace

Réponses:


11

Pour les réponses multivariées (nombre de variables dépendantes supérieures à 1), vous avez besoin family = "mgaussian"dans l'appel de glmnet.

Le package lsgl est une alternative, qui offre une pénalité plus flexible.

Avec une réponse dimensionnelle, le package glmnet implémente la pénalité où est le vecteur de coefficients pour le ème prédicteur. Dans la page d'aide pour vous pouvez lire:k

j=1pβj2

βj=(βj1,,βjk)Tjglmnet

Le premier [ family = "mgaussian"] permet d'ajuster un modèle gaussien à réponses multiples, en utilisant une pénalité "groupe-lasso" sur les coefficients pour chaque variable. Lier les réponses ensemble comme cela s'appelle l'apprentissage "multi-tâches" dans certains domaines.

Cette pénalité est un exemple de pénalité de lasso de groupe, qui regroupe les paramètres des différentes réponses associées au même prédicteur. Il en résulte la sélection des mêmes prédicteurs dans toutes les réponses pour une valeur donnée du paramètre de réglage.

Le package lsgl implémente des pénalités de lasso de groupe clairsemées de la forme où et sont certains poids choisis pour équilibrer les contributions des différents termes. La valeur par défaut est et . Le paramètre est un paramètre de réglage. Avec (et ) la pénalité est équivalente à la pénalité utilisée par avec . Avec (et

αj=1pl=1kξjl|βjl|+(1α)j=1pγjβj2

ξjlγjξjl=1γj=kα[0,1]α=0γj=1glmnetfamily = "mgaussian"α=1ξjl=1) la peine donne un lasso ordinaire. L'implémentation lsgl permet également un regroupement supplémentaire des prédicteurs.

Une note sur le lasso de groupe. Le terme lasso de groupe est souvent associé à un groupe de prédicteurs. Cependant, d'un point de vue plus général, le lasso de groupe est simplement un regroupement de paramètres dans la pénalité. Le regroupement utilisé par glmnetavec family = "mgaussian"est un regroupement de paramètres entre les réponses. Un tel regroupement a pour effet de coupler l'estimation des paramètres entre les réponses, ce qui s'avère être une bonne idée, si toutes les réponses peuvent être prédites à peu près à partir du même ensemble de prédicteurs. L'idée générale de coupler plusieurs problèmes d'apprentissage, qui devraient partager une certaine structure, est connue sous le nom d' apprentissage multi-tâches .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.