Kann jemand erklären, was das Foldid-Argument in glmnet bewirkt?

8

Ich versuche zu bestimmen, welches Alpha in meiner glmnetFunktion verwendet werden soll, aber die Hilfedatei sagt mir:

Beachten Sie, dass cv.glmnet NICHT nach Werten für Alpha sucht. Es sollte ein bestimmter Wert angegeben werden, andernfalls wird standardmäßig Alpha = 1 angenommen. Wenn Benutzer auch Alpha kreuzvalidieren möchten , sollten sie cv.glmnet mit einer vorberechneten Vektor-Foldid aufrufen und dann denselben Fold-Vektor in separaten Aufrufen von cv.glmnet mit unterschiedlichen Alpha-Werten verwenden.

Ich verstehe jedoch nicht:

  1. Was ist der foldid Vektor / Argument.
  2. So erstellen Sie den Foldid-Vektor
  3. Verwendung von Foldid-Argumenten.

Jede Unterstützung dabei wäre sehr dankbar!

der Waldökologe
quelle
Ich denke, dieser Parameter ist sinnvoll, wenn Sie verschiedene Modelle vergleichen. Sie möchten also die Falten steuern und vorab festlegen. Um Alpha auszuwählen, müssen Sie verschiedene Werte des Parameters ausprobieren.
Marbel

Antworten:

6

fold.idErmöglicht dem Benutzer, die Kreuzvalidierungsfalten für vorab festzulegen cv.glmnet. Zum Beispiel, wenn ich Daten habe

x    | y    | fold.id
-----+------+--------
0    | 1    | 1
1    | 1    | 1
0    | 0    | 2
1    | 2    | 2
.    | .    | .

Wenn Sie dann die angegebene Spalte als fold.idArgument übergeben, befinden cv.glmnetsich (zum Beispiel) die ersten beiden Beobachtungen in derselben Falte und die dritte und vierte Beobachtung in derselben (unterschiedlichen) Falte.

Die Autoren schlagen vor, dass, wenn Sie zwischen einer diskreten Sammlung von basierend auf einer Kreuzvalidierungsschätzung eines Fehlers bei einem optimalen wählen möchten , es die beste Vorgehensweise ist, jeweils dieselbe Faltstruktur zu verwenden Ihrer Kreuzvalidierungen bei der Bestimmung jedes .αλαλα

Matthew Drury
quelle
Die fold.id muss also eine Matrix mit der gleichen Anzahl von Zeilen wie meine Eingabematrix (x) sein? Ist das richtig?
Theforestecologist
Gibt es eine strategische Möglichkeit, die fold.id festzulegen, oder ist sie völlig willkürlich? Mit anderen Worten, wie definiere ich eine geeignete fold.id?
Theforestecologist
2
Nur ein Vektor von ganzen Zahlen, glaube ich. Aber ja, der Vektor sollte einen Eintrag für jede Zeile Ihrer Entwurfsmatrix haben.
Matthew Drury
Das hängt von Ihren Daten ab, aber der einfachste Fall wird von so etwas abgedeckt rbinom(now(X), n.folds, rep(1/n.folds, n.folds)).
Matthew Drury
Was ist der beste Weg, um dies für Zeitreihendaten einzurichten?
Frank
1

Laut der Glmnet-Vignette können Sie das foldidfür glmnet wie folgt einrichten:

foldid<-sample(1:10,size=length(y),replace=TRUE)

Und dann auf eine Reihe von Alphas anwenden:

cv1=cv.glmnet(x,y,foldid=foldid,alpha=1)
cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5)
cv0=cv.glmnet(x,y,foldid=foldid,alpha=0)

Mit dieser sample()Funktion können Sie im Grunde genommen einen Vektor von Zufallszahlen in dem von Ihnen angegebenen Bereich (= 1: n-fach) für die Länge der Antwortvariablenmatrix y generieren . Auf diese Weise weisen Sie jede Ihrer Eingabematrixzeilen einer zufälligen (aber jetzt festgelegten) Falte zu.

der Waldökologe
quelle
Hat jemand verstanden, wie die Autoren der Vignette aufgrund der 4 gedruckten Grafiken entschieden haben, dass Alpha = 1 am besten ist? Ihr Zitat: Wir sehen, dass Lasso (Alpha = 1) hier das Beste tut. Wir sehen auch, dass der Bereich der verwendeten Lambdas mit Alpha unterschiedlich ist. "... Ich verstehe nur nicht, wie sie festgestellt haben, dass Alpha = 1 am besten ist?
Theforestecologist
Ich glaube, der Grund ist, dass es die geringste Anzahl von Variablen verwendet. Das heißt, es ist das "einfachste" Modell und sollte besser verallgemeinern.
Marbel