train_test_split
teilt Arrays oder Matrizen in zufällige Zug- und Testteilmengen auf. Das bedeutet, dass Sie jedes Mal, wenn Sie es ohne Angabe ausführen random_state
, ein anderes Ergebnis erhalten. Dies ist das erwartete Verhalten. Beispielsweise:
Lauf 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Führen Sie 2 aus
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
Es ändert. Wenn Sie andererseits verwenden random_state=some_number
, können Sie garantieren, dass die Ausgabe von Lauf 1 gleich der Ausgabe von Lauf 2 ist , dh Ihre Aufteilung ist immer gleich. Es spielt keine Rolle, wie random_state
hoch die tatsächliche Zahl 42, 0, 21, ... ist. Wichtig ist, dass Sie jedes Mal, wenn Sie 42 verwenden, beim ersten Teilen immer dieselbe Ausgabe erhalten. Dies ist nützlich, wenn Sie reproduzierbare Ergebnisse wünschen, z. B. in der Dokumentation, damit jeder die gleichen Zahlen sehen kann, wenn er die Beispiele ausführt. In der Praxis würde ich sagen, Sie sollten die random_state
Zahl beim Testen auf eine feste Zahl setzen, diese dann aber in der Produktion entfernen, wenn Sie wirklich eine zufällige (und keine feste) Aufteilung benötigen.
In Bezug auf Ihre zweite Frage ist ein Pseudozufallszahlengenerator ein Zahlengenerator, der fast wirklich Zufallszahlen generiert. Warum sie nicht wirklich zufällig sind , ist aus dem Rahmen dieser Frage und wird wahrscheinlich nicht in Ihrem Fall egal, können Sie einen Blick hier weitere Details bilden.
Wenn Sie das nicht
random_state
in Ihrem Code angeben , wird jedes Mal, wenn Sie Ihren Code ausführen (ausführen), ein neuer Zufallswert generiert, und die Zug- und Testdatensätze haben jedes Mal unterschiedliche Werte.Wenn jedoch ein fester Wert wie folgt zugewiesen wird, ist
random_state = 42
das Ergebnis unabhängig davon, wie oft Sie Ihren Code ausführen, dasselbe .ie, dieselben Werte in Zug- und Testdatensätzen.quelle
Wenn Sie den random_state im Code nicht erwähnen, wird bei jeder Ausführung Ihres Codes ein neuer Zufallswert generiert, und die Zug- und Testdatensätze haben jedes Mal unterschiedliche Werte.
Wenn Sie jedoch jedes Mal einen bestimmten Wert für random_state (random_state = 1 oder einen anderen Wert) verwenden, ist das Ergebnis dasselbe, dh dieselben Werte in Zug- und Testdatensätzen. Siehe folgenden Code:
Egal wie oft Sie den Code ausführen, die Ausgabe wird 70 sein.
Versuchen Sie, den random_state zu entfernen und den Code auszuführen.
Jetzt ist die Ausgabe hier jedes Mal anders, wenn Sie den Code ausführen.
quelle
random_state number teilt die Test- und Trainingsdatensätze auf zufällige Weise auf. Zusätzlich zu dem, was hier erklärt wird, ist es wichtig zu bedenken, dass der random_state-Wert einen signifikanten Einfluss auf die Qualität Ihres Modells haben kann (mit Qualität meine ich im Wesentlichen die Genauigkeit der Vorhersage). Wenn Sie beispielsweise einen bestimmten Datensatz nehmen und ein Regressionsmodell damit trainieren, ohne den random_state-Wert anzugeben, besteht das Potenzial, dass Sie jedes Mal ein anderes Genauigkeitsergebnis für Ihr trainiertes Modell für die Testdaten erhalten. Daher ist es wichtig, den besten random_state-Wert zu finden, um das genaueste Modell zu erhalten. Und dann wird diese Nummer verwendet, um Ihr Modell bei einer anderen Gelegenheit zu reproduzieren, beispielsweise bei einem anderen Forschungsexperiment. Um dies zu tun,
quelle
Wenn kein Zufallsstatus vorhanden ist, verwendet das System einen Zufallsstatus, der intern generiert wird. Wenn Sie das Programm also mehrmals ausführen, werden möglicherweise unterschiedliche Zug- / Testdatenpunkte angezeigt, und das Verhalten ist unvorhersehbar. Falls Sie ein Problem mit Ihrem Modell haben, können Sie es nicht neu erstellen, da Sie die Zufallszahl nicht kennen, die beim Ausführen des Programms generiert wurde.
Wenn Sie die Baumklassifizierer sehen - entweder DT oder RF - versuchen sie, einen Versuch unter Verwendung eines optimalen Plans zu erstellen. Obwohl dieser Plan meistens derselbe ist, kann es Fälle geben, in denen der Baum und damit die Vorhersagen unterschiedlich sein können. Wenn Sie versuchen, Ihr Modell zu debuggen, können Sie möglicherweise nicht dieselbe Instanz neu erstellen, für die ein Baum erstellt wurde. Um all diesen Ärger zu vermeiden, verwenden wir beim Erstellen eines DecisionTreeClassifier oder RandomForestClassifier einen random_state.
PS: Sie können etwas genauer untersuchen, wie der Baum in DecisionTree erstellt wird, um dies besser zu verstehen.
randomstate wird grundsätzlich verwendet, um Ihr Problem bei jeder Ausführung gleich zu reproduzieren. Wenn Sie in traintestsplit keinen Zufallsstatus verwenden, erhalten Sie bei jeder Aufteilung möglicherweise einen anderen Satz von Zug- und Testdatenpunkten und helfen Ihnen beim Debuggen nicht, falls Sie ein Problem erhalten.
Aus Doc:
Wenn int, ist randomstate der Startwert, der vom Zufallszahlengenerator verwendet wird. Bei einer RandomState-Instanz ist randomstate der Zufallszahlengenerator. Wenn Keine, ist der Zufallszahlengenerator die von np.random verwendete RandomState-Instanz.
quelle
Teilen Sie Arrays oder Matrizen in zufällige Zug- und Testteilmengen auf
Wenn int, ist random_state der Startwert, der vom Zufallszahlengenerator verwendet wird. Bei einer RandomState-Instanz ist random_state der Zufallszahlengenerator. Wenn Keine, ist der Zufallszahlengenerator die von np.random verwendete RandomState-Instanz. Quelle: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
'' 'In Bezug auf den Zufallszustand wird er in vielen randomisierten Algorithmen in sklearn verwendet, um den zufälligen Startwert zu bestimmen, der an den Pseudozufallszahlengenerator übergeben wird. Daher regelt es keinen Aspekt des Verhaltens des Algorithmus. Infolgedessen entsprechen zufällige Zustandswerte, die im Validierungssatz gut abschneiden, nicht denen, die in einem neuen, unsichtbaren Testsatz gut abschneiden würden. Abhängig vom Algorithmus können Sie tatsächlich völlig unterschiedliche Ergebnisse sehen, wenn Sie nur die Reihenfolge der Trainingsmuster ändern. '' 'Quelle: /stats/263999/is-random-state-a-parameter -Stimmen
quelle