Ich habe eine Frage bezüglich der Funktion rfe
aus der Bibliothek caret
. Auf der Caret-Homepage link geben sie den folgenden RFE-Algorithmus ein:
Algorithmus
In diesem Beispiel verwende ich die rfe
-Funktion mit 3-facher Kreuzvalidierung und die train -Funktion mit einer linearen SVM- und 5-fachen Kreuzvalidierung.
rfe
würde die Daten (150 Samples) in 3 Faltungen aufteilen train
wird auf dem Trainingssatz (100 Stichproben) mit 5-facher Kreuzvalidierung ausgeführt, um die Modellparameter zu optimieren - mit anschließendem RFE. Was mich verwirrt ist, dass wenn ich mir die Ergebnisse der Funktion rfe
anschaue:
Daraus ergibt sich, dass die Größe der Trainingssätze aus dem 5-fachen cv 120 Samples ist, wenn ich eine Größe von 80 erwarten würde. ??
Es wäre also großartig, wenn jemand klären könnte, wie rfe und zusammenarbeiten .
Prost
%Vor% Das Problem hier ist, dass lapply(rf1$fit$control$index, length)
nicht speichert, was wir denken.
Für mich zu verstehen, dass es notwendig war, in den Code zu schauen. Was dort passiert, ist folgendes:
Wenn Sie rfe
aufrufen, werden die gesamten Daten an die nominalRfeWorkflow
übergeben.
In nominalRfeWorkflow
werden die nach rfeControl
aufgeteilten Zug- und Testdaten (in unserem Beispiel 3 mal nach der 3-fachen CV-Regel) an rfeIter
übergeben.
Diese Splits finden wir in unserem Ergebnis unter rf1$control$index
.
In rfeIter
werden die ~ 100 Trainingssamples (unser Beispiel) verwendet, um die finalen Variablen zu finden (was die Ausgabe dieser Funktion ist).
Wie ich es verstehe, werden die ~ 50 Testproben (unser Beispiel) verwendet, um die Leistung für die verschiedenen Variablensätze zu berechnen, aber sie werden nur als externe Leistung gespeichert, aber nicht zur Auswahl der endgültigen Variablen verwendet.
Zur Auswahl werden die Leistungsschätzungen der 5-fachen Kreuzvalidierung verwendet.
Aber wir können diese Indizes nicht im Endergebnis von rfe
finden.
Wenn wir sie wirklich brauchen, müssen wir sie von fitObject$control$index
in rfeIter
holen, zurück zu nominalRfeWorkflow
, dann zu rfe
und von dort in das resultierende rfe
-Class Objekt, das von rfe
zurückgegeben wird.
Was ist in lapply(rf1$fit$control$index, length)
gespeichert? - Wenn rfe
die besten Variablen gefunden hat, wird die endgültige Modellanpassung mit den besten Variablen und den vollständigen Referenzdaten erstellt (150). rf1$fit
wird wie folgt in rfe
erstellt:
fit <- rfeControl$functions$fit(x[, bestVar, drop = FALSE],
y,
first = FALSE,
last = TRUE,
...)
Diese Funktion führt erneut die Funktion train
aus und führt eine abschließende Kreuzvalidierung mit den vollständigen Referenzdaten, dem endgültigen Feature-Set und trControl
durch, die über die Ellipsen ( ...
) angegeben werden.
Da unser trControl
5-fach CV machen soll, ist es richtig, dass lapply(rf1$fit$control$index, length)
120 zurückgibt, da wir 150/5 * 4 = 120 berechnen müssen.
Tags und Links r r-caret cross-validation rfe