2016-07-19 32 views
5

Ich verwende createFolds() in R (Version: 3.3.0), um Zug/Test-Partitionen zu erstellen. Um die Ergebnisse reproduzierbar zu machen, verwendete ich set.seed() mit einem Keimwert von 10. Wie erwartet, waren die Ergebnisse (erzeugte Falten) reproduzierbar.R: set.seed() Ergebnisse stimmen nicht überein, wenn das Caret-Paket geladen wurde

Aber sobald ich Caret-Paket direkt nach dem Setzen der Samen geladen. Und dann habe ich mit createFolds festgestellt, dass die erzeugten Falten anders waren (obwohl sie immer noch reproduzierbar sind).

Insbesondere die erzeugten Falten unterscheiden sich in den folgenden beiden Fällen:

Fall 1:

library(caret) 
set.seed(10) 
folds=createFolds(y,k=5,returnTrain=TRUE) 

Fall 2:

set.seed(10) 
library(caret) 
folds=createFolds(y,k=5,returnTrain=TRUE) 

wo y ein Vektor ist.

Warum konnte das passieren?

Antwort

3

Der Schuldige ist ggplot2, das beim Laden von Caret angehängt wird. Es definiert eine .onAttach Funktion: https://github.com/hadley/ggplot2/blob/master/R/zzz.r

Diese Funktion wird aufgerufen, wenn das Paket beigefügt ist, siehe help("ns-hooks"). Und darin wird runif genannt, wodurch der Zustand des RNG fortschreitet.

+0

Eine [ähnliche Frage] (https://github.com/topepo/caret/issues/452) kam neulich auf; einige Paket verwenden Zufallszahlen beim Start – topepo

+0

@topepo gibt es in irgendeiner Weise um dieses Problem? Ich habe das gleiche Problem, aber selbst wenn ich den Seed nach dem Laden des Caret-Pakets setze. Wird das erwartet? Ich hatte gehofft, Caret für createFolds zu verwenden, aber ich brauche einen Weg, um es reproduzierbar zu machen. EDIT: Ich habe gerade gemerkt, dass ich nicht zwischen verschiedenen Aufrufen von 'createFolds()' den Grund gesetzt habe, das war das Problem. – Reilstein