Regressione ridge in python (passo dopo passo)


La regressione della cresta è 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 della cresta cerca di minimizzare quanto segue:

RSS + λΣβ j 2

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

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

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

Passaggio 1: importa i pacchetti necessari

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

 import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
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 della cresta

Successivamente, utilizzeremo la funzione RidgeCV() di sklearn per adattare il modello di regressione della cresta 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 RidgeCV() 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 = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring=' neg_mean_absolute_error ')

#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 della cresta finale per fare previsioni sulle 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 della cresta adattata per prevedere il valore hp di questa nuova osservazione:

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

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

array([104.16398018])

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

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 *