Régression Lasso en Python (étape par étape)



La régression Lasso est une méthode que nous pouvons utiliser pour ajuster un modèle de régression lorsque la multicolinéarité est présente dans les données.

En un mot, la régression des moindres carrés tente de trouver des estimations de coefficients qui minimisent la somme des carrés résiduels (RSS) :

RSS = Σ(y je – ŷ je )2

où:

  • Σ : Un symbole grec qui signifie somme
  • y i : la valeur de réponse réelle pour la ième observation
  • ŷ i : La valeur de réponse prédite basée sur le modèle de régression linéaire multiple

À l’inverse, la régression au lasso cherche à minimiser les éléments suivants :

RSS + λΣ|β j |

j va de 1 à p variables prédictives et λ ≥ 0.

Ce deuxième terme de l’équation est connu sous le nom de pénalité de retrait . Dans la régression par lasso, nous sélectionnons une valeur pour λ qui produit le test MSE (erreur quadratique moyenne) le plus bas possible.

Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer une régression lasso en Python.

Étape 1 : Importer les packages nécessaires

Tout d’abord, nous allons importer les packages nécessaires pour effectuer une régression lasso en Python :

import pandas as pd
from numpy import arange
from sklearn.linear_model import LassoCV
from sklearn.model_selection import RepeatedKFold

Étape 2 : Charger les données

Pour cet exemple, nous utiliserons un ensemble de données appelé mtcars , qui contient des informations sur 33 voitures différentes. Nous utiliserons hp comme variable de réponse et les variables suivantes comme prédicteurs :

  • mpg
  • poids
  • merde
  • qsec

Le code suivant montre comment charger et afficher cet ensemble de données :

#define URL where data is located
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"

#read in data
data_full = pd.read_csv(url)

#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]

#view first six rows of data
data[0:6]

	mpg	wt	drat	qsec	hp
0	21.0	2.620	3.90	16.46	110
1	21.0	2.875	3.90	17.02	110
2	22.8	2.320	3.85	18.61	93
3	21.4	3.215	3.08	19.44	110
4	18.7	3.440	3.15	17.02	175
5	18.1	3.460	2.76	20.22	105

Étape 3 : Ajuster le modèle de régression Lasso

Ensuite, nous utiliserons la fonction LassoCV() de sklearn pour ajuster le modèle de régression lasso et nous utiliserons la fonction RepeatedKFold() pour effectuer une validation croisée k fois afin de trouver la valeur alpha optimale à utiliser pour le terme de pénalité.

Remarque : le terme « alpha » est utilisé à la place de « lambda » en Python.

Pour cet exemple, nous choisirons k = 10 plis et répéterons le processus de validation croisée 3 fois.

Notez également que LassoCV() teste uniquement les valeurs alpha 0,1, 1 et 10 par défaut. Cependant, nous pouvons définir notre propre plage alpha de 0 à 1 par incréments de 0,01 :

#define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]

#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)

#define model
model = LassoCV(alphas=arange(0, 1, 0.01), cv=cv, n_jobs=-1)

#fit model
model.fit(X, y)

#display lambda that produced the lowest test MSE
print(model.alpha_)

0.99

La valeur lambda qui minimise le MSE du test s’avère être de 0,99 .

Étape 4 : Utiliser le modèle pour faire des prédictions

Enfin, nous pouvons utiliser le modèle de régression lasso final pour faire des prédictions sur de nouvelles observations. Par exemple, le code suivant montre comment définir une nouvelle voiture avec les attributs suivants :

  • mpg: 24
  • poids : 2,5
  • prix : 3,5
  • qsec : 18,5

Le code suivant montre comment utiliser le modèle de régression au lasso ajusté pour prédire la valeur hp de cette nouvelle observation :

#define new observation
new = [24, 2.5, 3.5, 18.5]

#predict hp value using lasso regression model
model.predict([new])

array([105.63442071])

Sur la base des valeurs saisies, le modèle prédit que cette voiture aura une valeur ch de 105,63442071 .

Vous pouvez trouver le code Python complet utilisé dans cet exemple ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *