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


Die Ridge-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 Ridge-Regression Folgendes zu minimieren:

RSS + λΣβ j 2

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

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

Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer Ridge-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 Ridge-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 Ridge-Regressionsmodell an

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

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

Beachten Sie außerdem, dass die Ridge-Regression eine Standardisierung der Daten erfordert, sodass jede Prädiktorvariable einen Mittelwert von 0 und eine Standardabweichung von 1 aufweist.

Glücklicherweise übernimmt glmnet() diese Standardisierung automatisch für Sie. Wenn Sie die Variablen bereits standardisiert haben, können Sie standardize=False angeben.

 library (glmnet)

#fit ridge regression model
model <- glmnet(x, y, alpha = 0 )

#view summary of model
summary(model)

          Length Class Mode   
a0 100 -none- numeric
beta 400 dgCMatrix S4     
df 100 -none- numeric
dim 2 -none- numeric
lambda 100 -none- numeric
dev.ratio 100 -none- numeric
nulldev 1 -none- numeric
npasses 1 -none- numeric
jerr 1 -none- numeric
offset 1 -none- logical
call 4 -none- call   
nobs 1 -none- numeric

Schritt 3: Wählen Sie einen optimalen Wert für Lambda

Als Nächstes ermitteln wir mithilfe der k-fachen Kreuzvalidierung den Lambda-Wert, der den niedrigsten mittleren quadratischen Testfehler (MSE) erzeugt.

Glücklicherweise verfügt glmnet über die Funktion cv.glmnet() , die automatisch eine k-fache Kreuzvalidierung mit k = 10 Mal durchführt.

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

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

[1] 10.04567

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

Kreuzvalidierung für die Ridge-Regression in R

Der Lambda-Wert, der den MSE-Test minimiert, beträgt 10,04567 .

Schritt 4: 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 = 0 , lambda = best_lambda)
coef(best_model)

5 x 1 sparse Matrix of class "dgCMatrix"
                    s0
(Intercept) 475.242646
mpg -3.299732
wt 19.431238
drat -1.222429
qsec -17.949721

Wir können auch ein Trace-Diagramm erstellen, um zu visualisieren, wie sich die Koeffizientenschätzungen aufgrund des Anstiegs von Lambda geändert haben:

 #produce Ridge trace plot
plot(model, xvar = " lambda ") 

Gratspur in R

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

 #use fitted best model to make predictions
y_predicted <- predict (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.7999513

Es stellt sich heraus, dass das R-Quadrat 0,7999513 beträgt. Das heißt, das beste Modell konnte 79,99 % 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