glmnet mit benutzerdefiniertem trainControl und Tuning
Wie du im Video gesehen hast, passt das glmnet-Modell tatsächlich viele Modelle auf einmal an (eine der großen Stärken des Pakets). Das kannst du ausnutzen, indem du eine große Anzahl an lambda-Werten übergibst, die den Grad der Regularisierung im Modell steuern. train() ist schlau genug, nur ein Modell pro alpha-Wert zu fitten und alle lambda-Werte auf einmal für ein gleichzeitiges Fitten zu übergeben.
Mein bevorzugtes Tuning-Grid für glmnet-Modelle ist:
expand.grid(
alpha = 0:1,
lambda = seq(0.0001, 1, length = 100)
)
Dieses Grid untersucht eine große Anzahl an lambda-Werten (genau 100), von einem sehr kleinen bis zu einem sehr großen. (Du könntest das maximale lambda auf 10 erhöhen, aber in dieser Übung ist 1 eine gute obere Grenze.)
Wenn du weniger Modelle untersuchen möchtest, kannst du eine kürzere Lambda-Sequenz verwenden. Zum Beispiel würde lambda = seq(0.0001, 1, length = 10) 10 Modelle pro Alpha-Wert fitten.
Mit diesem tuneGrid betrachtest du außerdem die beiden Formen regulierter Modelle: Ridge-Regression und Lasso-Regression. alpha = 0 ist reine Ridge-Regression, und alpha = 1 ist reine Lasso-Regression. Du kannst eine Mischung aus beiden Modellen (also ein Elastic Net) mit einem alpha zwischen 0 und 1 fitten. Zum Beispiel wären bei alpha = 0.05 95 % Ridge-Regression und 5 % Lasso-Regression enthalten.
In dieser Aufgabe untersuchst du nur die beiden Extreme – reine Ridge- und reine Lasso-Regression – um ihre Unterschiede zu veranschaulichen.
Diese Übung ist Teil des Kurses
Maschinelles Lernen mit caret in R
Anleitung zur Übung
- Trainiere ein
glmnet-Modell auf denoverfit-Daten, wobeiydie Zielvariable ist und alle anderen Variablen erklärende Variablen sind. Achte darauf, dein benutzerdefiniertestrainControlaus der vorherigen Übung (myControl) zu verwenden. Verwende außerdem ein benutzerdefiniertestuneGrid, umalpha = 0:1und 20 Werte vonlambdazwischen 0.0001 und 1 pro Alpha-Wert zu untersuchen. - Gib
modelin der Konsole aus. - Gib das
max()der ROC-Kennzahl inmodel[["results"]]aus. Du kannst darauf zugreifen mitmodel[["results"]][["ROC"]].
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Train glmnet with custom trainControl and tuning: model
model <- train(
___,
___,
tuneGrid = ___(
___,
___
),
method = ___,
trControl = ___
)
# Print model to console
# Print maximum ROC statistic