Auswahl von random_state für slearn-Algorithmen

9

Ich verstehe, dass random_state in verschiedenen Sklearn-Algorithmen verwendet wird, um die Verbindung zwischen verschiedenen Prädiktoren (Bäumen) mit demselben metrischen Wert zu trennen (sagen wir zum Beispiel in GradientBoosting ). Aber die Dokumentation klärt oder erläutert dies nicht. Wie

1) Wo sonst werden diese Samen für die Zufallsgenerierung verwendet? Sagen Sie für RandomForestClassifier , die Zufallszahl kann verwendet werden, um eine Reihe zufälliger Merkmale zu finden, um einen Prädiktor zu erstellen. Algorithmen, die Subsampling verwenden, können Zufallszahlen verwenden, um verschiedene Subsamples zu erhalten. Kann / Ist derselbe Startwert ( random_state ) in mehreren Zufallszahlengenerationen eine Rolle?

Worüber ich hauptsächlich besorgt bin, ist

2) Wie weitreichend ist der Effekt dieser Variable random_state? ? Kann der Wert einen großen Unterschied in der Vorhersage (Klassifizierung oder Regression) machen? Wenn ja, für welche Art von Datensätzen sollte ich mich interessieren? Oder geht es eher um Stabilität als um Qualität der Ergebnisse?

3) Wenn es einen großen Unterschied machen kann, wie wählt man den random_state am besten aus? Es ist schwierig, GridSearch ohne eine Intuition durchzuführen. Besonders wenn der Datensatz so ist, dass ein Lebenslauf eine Stunde dauern kann.

4) Wenn das Motiv nur stetige Ergebnisse / Bewertungen meiner Modelle und Kreuzvalidierungsergebnisse über wiederholte Läufe haben soll, hat das den gleichen Effekt, wenn ich random.seed(X) vor Verwendung eines der Algorithmen einstelle (und% verwende co_de% als Keine).

5) Angenommen, ich verwende einen random_state -Wert für einen GradientBoosted Classifier, und ich überprüfe gegenseitig, um die Güte meines Modells zu ermitteln (jedes Mal, wenn der Validierungssatz bewertet wird). Sobald ich zufrieden bin, trainiere ich mein Modell auf dem gesamten Trainingssatz, bevor ich es auf dem Testset anwende. Jetzt hat der vollständige Trainingssatz mehr Instanzen als die kleineren Trainingssätze in der Kreuzvalidierung. Der random_state -Wert kann nun zu einem völlig anderen Verhalten führen (Auswahl von Features und individuellen Prädiktoren) im Vergleich zu dem, was in der cv-Schleife passiert. Ähnlich können Dinge wie min samples leaf usw. auch zu einem minderwertigen Modell führen, da nun die Einstellungen die Anzahl der Instanzen in CV sind, während die tatsächliche Anzahl der Instanzen mehr ist. Ist das ein richtiges Verständnis? Was ist der Ansatz, um dagegen zu schützen?

    
Run2 29.09.2014, 10:38
quelle

2 Antworten

3

Ja, die Auswahl der zufälligen Startwerte wird sich auf Ihre Vorhersageergebnisse auswirken und wie Sie in Ihrer vierten Frage ausgeführt haben, ist die Auswirkung nicht wirklich vorhersehbar.

Der übliche Weg, sich vor zufällig oder zufällig auftretenden Vorhersagen zu schützen, besteht darin, mehrere Modelle (basierend auf verschiedenen Zufallszuständen) zu trainieren und ihre Vorhersagen auf sinnvolle Weise zu mitteln. In ähnlicher Weise können Sie die Cross-Validierung als eine Möglichkeit sehen, die "wahre" Leistung eines Modells zu schätzen, indem Sie die Leistung über mehrere Trainings- / Testdaten-Splits mitteln.

    
Tobias 29.09.2014 11:24
quelle
0
  

1) Wo sonst werden diese Samen für die Zufallsgenerierung verwendet? Sagen Sie für RandomForestClassifier, Zufallszahl kann verwendet werden, um eine Reihe von zufälligen Features zu finden, um einen Prädiktor zu erstellen. Algorithmen, die Subsampling verwenden, können Zufallszahlen verwenden, um verschiedene Subsamples zu erhalten. Kann / Ist der selbe Seed (random_state) in mehreren Zufallszahlengenerationen eine Rolle?

random_state wird überall dort verwendet, wo Zufälligkeit benötigt wird :

  
    

Wenn Ihr Code auf einem Zufallszahlengenerator basiert, sollte er niemals Funktionen wie numpy.random.random oder numpy.random.normal verwenden. Dieser Ansatz kann zu Wiederholbarkeitsproblemen in Komponententests führen. Stattdessen sollte ein Objekt numpy.random.RandomState verwendet werden, das aus einem random_state -Argument erstellt wird, das an die Klasse oder Funktion übergeben wird.

  

  

2) Wie weitreichend ist der Effekt dieser Variable random_state? ? Kann der Wert einen großen Unterschied in der Vorhersage (Klassifizierung oder Regression) machen? Wenn ja, für welche Art von Datensätzen sollte ich mich interessieren? Oder geht es eher um Stabilität als um Qualität der Ergebnisse?

Gute Probleme sollten nicht zu sehr von random_state abhängen.

  

3) Wenn es einen großen Unterschied machen kann, wie wählt man den random_state am besten aus? Es ist schwierig, GridSearch ohne eine Intuition durchzuführen. Besonders wenn der Datensatz so ist, dass ein Lebenslauf eine Stunde dauern kann.

Wählen Sie es nicht aus. Stattdessen versuchen Sie, die anderen Aspekte der Klassifizierung zu optimieren, um gute Ergebnisse zu erzielen, unabhängig von random_state .

  

4) Wenn das Motiv nur stetige Ergebnisse / Bewertungen meiner Modelle und Kreuzvalidierungsergebnisse über wiederholte Läufe haben soll, hat es den gleichen Effekt, wenn ich random.seed (X) vor der Verwendung eines der Algorithmen ( und benutze random_state als None).

Ab Sollte ich 'random.seed' oder 'numpy.random.seed' verwenden, um die Zufallszahlengenerierung in 'scikit-learn' zu steuern? , wird random.seed(X) von sklearn nicht verwendet. Wenn Sie dies steuern möchten, können Sie stattdessen np.random.seed() festlegen.

  

5) Angenommen, ich verwende einen random_state-Wert für einen GradientBoosted-Klassifizierer, und ich überprüfe die Gültigkeit des Modells (jedes Mal, wenn das Validierungsset gesetzt wird). Sobald ich zufrieden bin, trainiere ich mein Modell auf dem gesamten Trainingssatz, bevor ich es auf dem Testset anwende. Jetzt hat der vollständige Trainingssatz mehr Instanzen als die kleineren Trainingssätze in der Kreuzvalidierung. Daher kann der random_state-Wert nun zu einem völlig anderen Verhalten führen (Auswahl von Features und individuellen Prädiktoren) im Vergleich zu dem, was innerhalb der cv-Schleife passiert. Ähnlich können Dinge wie min samples leaf usw. auch zu einem minderwertigen Modell führen, da nun die Einstellungen die Anzahl der Instanzen in CV sind, während die tatsächliche Anzahl der Instanzen größer ist. Ist das ein richtiges Verständnis? Was ist der Ansatz, um dagegen zu schützen?

Wie kann ich Trainingsdaten wissen? genug für maschinelles Lernen Die Antworten geben meistens an, dass je mehr Daten, desto besser.

Wenn du viel Auswahl an Modellen machst, kann vielleicht auch Sacred helfen. Unter anderem setzt und kann log der zufällige Startwert für jede Auswertung, zB:

%Vor%
    
serv-inc 29.06.2017 18:27
quelle