Verschiedene Ergebnisse mit randomForest () und caret's randomForest (method="rf")

8

Ich bin neu zu caret, und ich möchte nur sicherstellen, dass ich völlig verstehe, was es tut. Zu diesem Zweck habe ich versucht, die Ergebnisse zu reproduzieren, die ich von einem randomForest () -Modell mit Hilfe der caret-Funktion train () für method="rf" erhalten habe. Leider konnte ich keine übereinstimmenden Ergebnisse erzielen, und ich frage mich, was ich übersehe.

Ich füge auch hinzu, dass RandomForest Bootstrapping verwendet, um Samples zu erzeugen, die zu jedem der ntrees passen, und den Fehler basierend auf Out-of-Bag-Vorhersagen schätzt. Ich bin ein wenig unscharf über den Unterschied zwischen der Angabe von "oob" und "boot" im Aufruf der Funktion trainControl. Diese Optionen erzeugen unterschiedliche Ergebnisse, aber keines entspricht dem Modell randomForest ().

Obwohl ich die Caret-Paket-Website ( Ссылка ) gelesen habe, sowie verschiedene StackOverflow-Fragen, die scheinen potenziell relevant, aber ich konnte nicht herausfinden, warum das Caret-Methode="rf" -Modell unterschiedliche Ergebnisse von RandomForest () erzeugt. Vielen Dank für Ihre Einblicke.

Hier ist ein replizierbares Beispiel, das den CO2-Datensatz aus dem MASS-Paket verwendet.

%Vor%

Erzeugt Folgendes:

  

drucken (rf.model)

%Vor%
  

drucken (caret.oob.model $ finalModel)

%Vor%
  

drucken (caret.boot.model $ finalModel)

%Vor%

Und der Code, um die Wichtigkeit der Variablen zu betrachten:

%Vor%     
ej5607 18.04.2016, 14:33
quelle

1 Antwort

5

Die Verwendung der Formelschnittstelle im Zug konvertiert die Faktoren in Dummy. Um Ergebnisse von caret mit randomForest zu vergleichen, sollten Sie die Nicht-Formel-Schnittstelle verwenden.

In Ihrem Fall sollten Sie einen Samen in trainControl angeben, um das gleiche Ergebnis wie in randomForest zu erhalten.

Bereichstraining auf der Caret-Webseite, es gibt einige Hinweise zur Reproduzierbarkeit, wo erklärt wird, wie man Samen verwendet.

%Vor%

Wenn Sie ein Resampling durchführen, sollten Sie für jede Resampling-Iteration Startwerte und für das endgültige Modell einen zusätzlichen Startwert angeben. Beispiele in ?trainControl zeigen, wie sie erstellt werden.

Im folgenden Beispiel ist der letzte Seed für das endgültige Modell und ich setze ihn auf 1.

%Vor%

Definiert man die Nicht-Formel-Schnittstelle mit caret und dem Startwert in trainControl korrekt, erhalten Sie in allen drei Modellen dieselben Ergebnisse:

%Vor%     
Lluís Ramon 19.04.2016, 09:18
quelle

Tags und Links