Interpretation Lasso Regression

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
Hadsga
Beiträge: 21
Registriert: Di Aug 01, 2017 2:09 pm

Interpretation Lasso Regression

Beitrag von Hadsga »

Hallo,

ich habe einen Datensatz mit einer Vielzahl an Variablen und möchte versuchen die Lasso Regression zu verwenden. Meine Frage ist, wie man die Ergbenisse interpretiert.

Als Beispiel nutze ich den Hitters Datansatz, bei dem die einzelnen Variablen hoch miteinander korrelieren. Ziel ist es den Salary aus den Daten vorherzusagen.

Code: Alles auswählen

library(ISLR)
library(dplyr)

Hitters = Hitters %>%
  select_if(is.numeric) %>%
  drop_na() 
  
Grundsätlich bestünde die Möglichkeit auch die forward/backward selection zu werden. Problem ist, dass dadurch Variablen zu früh oder zu spät ausgeschlossen werden, sodass günstige Kombinationen nicht erkannt werden. Die best subset selection testet zwar alle möglichen Kombinationen, was bei großen Datsätzen allerdings nicht möglich ist.


Wenn ich den Ansatz richtig verstanden habe geht es letzendlich darum, dass Modell schlechter and die Daten anzupassen (Underfitting), damit es sich besser auf neue Daten genralisieruen lässt (Vermeidung von Overfitting). Erreicht wird dies über die Abschwächung der Betagewichte, indem Lambda (der Abschwächungsparameter) so gewählt wird, dass das Model in der Kreuzvalisierung einen möglichst niedrigen MSE erzeilt. Redundante Variablen werden aus dem Modell entfernt.

Code: Alles auswählen

x = model.matrix(Salary~., data = Hitters) [,-1]

y = Hitters$Salary

cv_lasso = cv.glmnet(x, y, family = "gaussian", alpha = 1)

lasso_fit = glmnet(x, y, family = "gaussian", alpha = 1, lambda = cv_lasso$lambda.min)

lasso_fit$dev.ratio

[1] 0.4550314
Insgesamt erzielt das Model auf den Trainingsdaten ein R2 von 0.46.

Code: Alles auswählen

coef(cv_lasso, s = "lambda.min")

17 x 1 sparse Matrix of class "dgCMatrix"
                       1
(Intercept) 112.92545928
AtBat        -2.10738061
Hits          7.11740833
HmRun         .         
Runs         -0.76056943
RBI           0.52165693
Walks         5.57560314
Years        -6.26048866
CAtBat       -0.08666284
CHits         .         
CHmRun        0.18596454
CRuns         1.24205851
CRBI          0.57095256
CWalks       -0.70280961
PutOuts       0.29323943
Assists       0.30799889
Errors       -2.47859590
Betrachtet man den Output, würde ein Spieler, wenn alle Variablen Null wären 28,87 Einheiten verdienen. Pro Schlag (AtBat) würde sich der Salary um -2.10 Einheiten veringern. CHits und HMrund wurden entfernt.
Antworten