Lasso-regression in r (schritt für schritt)


Die Lasso-Regression ist eine Methode, mit der wir ein Regressionsmodell anpassen können, wenn in den Daten Multikollinearität vorhanden ist.

Kurz gesagt versucht die Regression der kleinsten Quadrate, Koeffizientenschätzungen zu finden, die die verbleibende Quadratsumme (RSS) minimieren:

RSS = Σ(y i – ŷ i )2

Gold:

  • Σ : Ein griechisches Symbol für Summe
  • y i : der tatsächliche Antwortwert für die i-te Beobachtung
  • ŷ i : Der vorhergesagte Antwortwert basierend auf dem multiplen linearen Regressionsmodell

Umgekehrt versucht die Lasso-Regression Folgendes zu minimieren:

RSS + λΣ|β j |

wobei j von 1 zu p Prädiktorvariablen geht und λ ≥ 0 ist.

Dieser zweite Term in der Gleichung wird als Auszahlungsstrafe bezeichnet. Bei der Lasso-Regression wählen wir einen Wert für λ, der den niedrigstmöglichen MSE-Test (mittlerer quadratischer Fehler) ergibt.

Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer Lasso-Regression in R.

Schritt 1: Daten laden

Für dieses Beispiel verwenden wir den integrierten Datensatz von R namens mtcars . Wir werden hp als Antwortvariable und die folgenden Variablen als Prädiktoren verwenden:

  • mpg
  • Gewicht
  • Scheisse
  • qsec

Um eine Lasso-Regression durchzuführen, verwenden wir Funktionen aus dem glmnet- Paket. Dieses Paket erfordert, dass die Antwortvariable ein Vektor ist und dass der Satz von Prädiktorvariablen der Klasse data.matrix angehört.

Der folgende Code zeigt, wie wir unsere Daten definieren:

 #define response variable
y <- mtcars$hp

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

Schritt 2: Passen Sie das Lasso-Regressionsmodell an

Als nächstes verwenden wir die Funktion glmnet() , um das Lasso-Regressionsmodell anzupassen und alpha=1 anzugeben.

Beachten Sie, dass die Einstellung von Alpha auf 0 der Verwendung der Ridge-Regression und die Einstellung von Alpha auf einen Wert zwischen 0 und 1 der Verwendung eines elastischen Netzes entspricht.  

Um zu bestimmen, welcher Wert für Lambda verwendet werden soll, führen wir eine k-fache Kreuzvalidierung durch und identifizieren den Lambda-Wert, der den niedrigsten mittleren quadratischen Testfehler (MSE) erzeugt.

Beachten Sie, dass die Funktion cv.glmnet() automatisch eine k-fache Kreuzvalidierung mit k = 10 Mal durchführt.

 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) 

Testen von MSE auf Lasso-Regression in R

Der Lambda-Wert, der den MSE-Test minimiert, beträgt 5,616345 .

Schritt 3: Analysieren Sie das endgültige Modell

Schließlich können wir das endgültige Modell analysieren, das durch den optimalen Lambda-Wert erzeugt wird.

Wir können den folgenden Code verwenden, um die Koeffizientenschätzungen für dieses Modell zu erhalten:

 #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

Für den drat- Prädiktor wird kein Koeffizient angezeigt, da die Lasso-Regression den Koeffizienten auf Null reduziert hat. Das bedeutet, dass er komplett aus dem Modell entfernt wurde, weil er nicht genügend Einfluss hatte.

Beachten Sie, dass dies ein wesentlicher Unterschied zwischen der Ridge-Regression und der Lasso-Regression ist. Die Ridge-Regression reduziert alle Koeffizienten in Richtung Null, aber die Lasso-Regression hat das Potenzial, Prädiktoren aus dem Modell zu entfernen, indem die Koeffizienten vollständig auf Null reduziert werden.

Wir können das endgültige Lasso-Regressionsmodell auch verwenden, um Vorhersagen über neue Beobachtungen zu treffen. Angenommen, wir haben ein neues Auto mit den folgenden Eigenschaften:

  • MPG: 24
  • Gewicht: 2,5
  • Preis: 3,5
  • qsec: 18,5

Der folgende Code zeigt, wie das angepasste Lasso-Regressionsmodell verwendet wird, um den HP- Wert dieser neuen Beobachtung vorherzusagen:

 #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

Basierend auf den eingegebenen Werten prognostiziert das Modell, dass dieses Auto einen PS- Wert von 109,0842 haben wird.

Schließlich können wir dasR-Quadrat des Modells anhand der Trainingsdaten berechnen:

 #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

Das R-Quadrat beträgt 0,8047064 . Das heißt, das beste Modell konnte 80,47 % der Variation der Antwortwerte der Trainingsdaten erklären.

Den vollständigen R-Code, der in diesem Beispiel verwendet wird, finden Sie hier .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert