Regressione lazo in python (passo dopo passo)


La regressione lazo è un metodo che possiamo utilizzare per adattare un modello di regressione quando nei dati è presente la multicollinearità .

In poche parole, la regressione dei minimi quadrati tenta di trovare stime di coefficienti che minimizzino la somma residua dei quadrati (RSS):

RSS = Σ(y i – ŷ i )2

Oro:

  • Σ : simbolo greco che significa somma
  • y i : il valore di risposta effettivo per l’ i-esima osservazione
  • ŷ i : il valore di risposta previsto basato sul modello di regressione lineare multipla

Al contrario, la regressione lazo cerca di minimizzare quanto segue:

RSS + λΣ|β j |

dove j va da 1 a p variabili predittive e λ ≥ 0.

Questo secondo termine nell’equazione è noto come penalità di ritiro . Nella regressione al lazo, selezioniamo un valore per λ che produce il test MSE (errore quadratico medio) più basso possibile.

Questo tutorial fornisce un esempio passo passo di come eseguire la regressione lazo in Python.

Passaggio 1: importa i pacchetti necessari

Per prima cosa importeremo i pacchetti necessari per eseguire la regressione lazo in Python:

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

Passaggio 2: caricare i dati

Per questo esempio utilizzeremo un set di dati chiamato mtcars , che contiene informazioni su 33 auto diverse. Utilizzeremo hp come variabile di risposta e le seguenti variabili come predittori:

  • mpg
  • peso
  • merda
  • qsec

Il codice seguente mostra come caricare e visualizzare questo set di dati:

 #define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/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

Passaggio 3: adattare il modello di regressione lazo

Successivamente, utilizzeremo la funzione LassoCV() di sklearn per adattare il modello di regressione lazo e utilizzeremo la funzione RepeatedKFold() per eseguire la convalida incrociata k-fold per trovare il valore alfa ottimale da utilizzare per il termine di penalità.

Nota: in Python viene utilizzato il termine “alpha” al posto di “lambda”.

Per questo esempio, sceglieremo k = 10 volte e ripeteremo il processo di convalida incrociata 3 volte.

Tieni inoltre presente che LassoCV() verifica solo i valori alfa 0,1, 1 e 10 per impostazione predefinita. Tuttavia, possiamo impostare il nostro intervallo alfa da 0 a 1 con incrementi di 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

Il valore lambda che minimizza l’MSE del test risulta essere 0,99 .

Passaggio 4: utilizzare il modello per fare previsioni

Infine, possiamo utilizzare il modello di regressione lazo finale per fare previsioni su nuove osservazioni. Ad esempio, il codice seguente mostra come definire una nuova automobile con i seguenti attributi:

  • mpg: 24
  • peso: 2,5
  • prezzo: 3,5
  • qsec: 18,5

Il codice seguente mostra come utilizzare il modello di regressione lazo adattato per prevedere il valore hp di questa nuova osservazione:

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

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

array([105.63442071])

In base ai valori inseriti, il modello prevede che questa vettura avrà un valore di CV pari a 105,63442071 .

Puoi trovare il codice Python completo utilizzato in questo esempio qui .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *