R caret / Wie funktioniert die Kreuzvalidierung für Zug in RFE?

9

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.

%Vor%
  • Von dem obigen Algorithmus nahm ich an, dass der Algorithmus mit 2 verschachtelten Kreuzvalidierungen arbeiten würde:
    1. rfe würde die Daten (150 Samples) in 3 Faltungen aufteilen
    2. Die Funktion 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:

%Vor%

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%     
Fabian_G 22.01.2013, 19:59
quelle

1 Antwort

0

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.

    
ben 20.09.2017 13:10
quelle

Tags und Links