Die R-Funktion cv.glm (Bibliothek: Boot) berechnet den geschätzten K-fachen Kreuzvalidierungs-Vorhersagefehler für verallgemeinerte lineare Modelle und gibt Delta zurück. Ist es sinnvoll, diese Funktion für eine Lasso-Regression (Bibliothek: glmnet) zu verwenden, und wenn ja, wie kann sie ausgeführt werden? Die glmnet-Bibliothek verwendet eine Kreuzvalidierung, um den besten Drehparameter zu erhalten, aber ich habe kein Beispiel gefunden, das die endgültige glmnet-Gleichung kreuzvalidiert.
r
regression
cross-validation
lasso
glmnet
Kalakaru
quelle
quelle
Antworten:
Ein Beispiel, wie man für lasso Vanille Ebene Kreuzvalidierung zu tun , in
glmnet
aufmtcars
Datensatz.Datensatz laden.
Bereiten Sie Funktionen vor (unabhängige Variablen). Sie sollten von
matrix
Klasse sein. Der einfachste Weg, umdf
kategoriale Variablen zu konvertieren ,matrix
ist viamodel.matrix
. Wohlgemerkt, standardmäßigglmnet
passt Intercept, daher sollten Sie Intercept besser aus der Modellmatrix entfernen.Antwort vorbereiten (abhängige Variable). Codieren wir Autos mit überdurchschnittlich
mpg
effizient ('1') und dem Rest als ineffizient ('0'). Konvertieren Sie diese Variable in Faktor.Führen Sie die Kreuzvalidierung über aus
cv.glmnet
. Es wirdalpha=1
von den Standardparametern übernommenglmnet
, nach denen Sie gefragt haben: Lasso-Regression.Wenn Sie die Ergebnisse der Kreuzvalidierung untersuchen, sind Sie möglicherweise an mindestens zwei Informationen interessiert:
Lambda, das den kreuzvalidierten Fehler minimiert.
glmnet
bietet tatsächlich 2 Lambdas:lambda.min
undlambda.1se
. Es ist Ihr Urteilsvermögen als praktizierender Statistiker, das Sie verwenden sollten.resultierende regulierte Koeffizienten.
Bitte beachten Sie den R-Code gemäß den obigen Anweisungen:
Letzte Kommentare:
Beachten Sie, dass die Ausgabe des Modells nichts über die statistische Signifikanz der Koeffizienten aussagt, sondern nur über Werte.
l1 Penalizer (Lasso), nach dem Sie gefragt haben, ist für seine Instabilität berüchtigt, wie in diesem Blog-Beitrag und dieser Frage zum Stapelaustausch gezeigt wird . Ein besserer Weg könnte darin bestehen, auch eine
alpha
Kreuzvalidierung durchzuführen, bei der Sie sich für die richtige Mischung von l1- und l2-Strafen entscheiden können.Eine alternative Möglichkeit zur Kreuzvalidierung könnte darin bestehen, sich an Carets zu wenden
train( ... method='glmnet')
und schließlich ist der beste Weg, mehr über
cv.glmnet
die Standardeinstellungen zu erfahren,glmnet
natürlich?glmnet
in Rs Konsole)))quelle