Regressione lazo in r (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 una regressione lazo in R.

Passaggio 1: caricare i dati

Per questo esempio, utilizzeremo il set di dati integrato di R chiamato mtcars . Utilizzeremo hp come variabile di risposta e le seguenti variabili come predittori:

  • mpg
  • peso
  • merda
  • qsec

Per eseguire la regressione lazo, utilizzeremo le funzioni del pacchetto glmnet . Questo pacchetto richiede che la variabile di risposta sia un vettore e che l’insieme di variabili predittive sia della classe data.matrix .

Il codice seguente mostra come definire i nostri dati:

 #define response variable
y <- mtcars$hp

#define matrix of predictor variables
x <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])

Passaggio 2: adattare il modello di regressione lazo

Successivamente, utilizzeremo la funzione glmnet() per adattare il modello di regressione lazo e specificheremo alpha=1 .

Si noti che impostare alpha uguale a 0 equivale a utilizzare la regressione della cresta e impostare alpha su un valore compreso tra 0 e 1 equivale a utilizzare una rete elastica.  

Per determinare quale valore utilizzare per lambda, eseguiremo una convalida incrociata k-fold e identificheremo il valore lambda che produce l’errore quadratico medio (MSE) più basso del test.

Tieni presente che la funzione cv.glmnet() esegue automaticamente la convalida incrociata k-fold utilizzando k = 10 volte.

 library (glmnet)

#perform k-fold cross-validation to find optimal lambda value
cv_model <- cv. glmnet (x, y, alpha = 1 )

#find optimal lambda value that minimizes test MSE
best_lambda <- cv_model$ lambda . min
best_lambda

[1] 5.616345

#produce plot of test MSE by lambda value
plot(cv_model) 

Testare MSE per la regressione lazo in R

Il valore lambda che minimizza il test MSE risulta essere 5.616345 .

Passaggio 3: analizzare il modello finale

Infine, possiamo analizzare il modello finale prodotto dal valore lambda ottimale.

Possiamo utilizzare il seguente codice per ottenere le stime dei coefficienti per questo modello:

 #find coefficients of best model
best_model <- glmnet(x, y, alpha = 1 , lambda = best_lambda)
coef(best_model)

5 x 1 sparse Matrix of class "dgCMatrix"
                   s0
(Intercept) 484.20742
mpg -2.95796
wt 21.37988
drat.      
qsec -19.43425

Non viene visualizzato alcun coefficiente per il predittore drat perché la regressione lazo ha ridotto il coefficiente a zero. Ciò significa che è stato completamente rimosso dal modello perché non aveva abbastanza influenza.

Si noti che questa è una differenza fondamentale tra la regressione della cresta e la regressione del lazo . La regressione della cresta riduce tutti i coefficienti verso lo zero, ma la regressione del lazo ha il potenziale per rimuovere i predittori dal modello riducendo i coefficienti completamente a zero.

Possiamo anche utilizzare il modello di regressione lazo finale per fare previsioni su nuove osservazioni. Ad esempio, supponiamo di avere una nuova auto 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 = matrix(c(24, 2.5, 3.5, 18.5), nrow= 1 , ncol= 4 ) 

#use lasso regression model to predict response value
predict(best_model, s = best_lambda, newx = new)

[1,] 109.0842

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

Infine, possiamo calcolare l’ R quadrato del modello sui dati di addestramento:

 #use fitted best model to make predictions
y_predicted <- predict (best_model, s = best_lambda, newx = x)

#find OHS and SSE
sst <- sum ((y - mean (y))^2)
sse <- sum ((y_predicted - y)^2)

#find R-Squared
rsq <- 1 - sse/sst
rsq

[1] 0.8047064

La R al quadrato risulta essere 0.8047064 . Cioè, il modello migliore è stato in grado di spiegare l’ 80,47% della variazione nei valori di risposta dei dati di addestramento.

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

Aggiungi un commento

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