2017-07-20 4 views
2

Ich habe den folgenden Code, wo I die Pandas verwenden random_stateWas genau macht der Pandas random_state?

randomState = 123 
sampleSize = 750 
df = pd.read_csv(filePath, delim_whitespace=True) 
df_s = df.sample(n=sampleSize, random_state=randomState) 

Dies erzeugt eine Probe df_s Datenrahmen. Jedes Mal, wenn ich den Code mit der gleichen randomState starte, bekomme ich die gleiche Probe df_s. Wenn ich den Wert von 123 zu 12 ändere, ändert sich auch das Beispiel, also denke ich, dass das random_state tut.

Meine dumme Frage: Wie wirkt sich die Nummernänderung auf den Probenwechsel aus? Ich las die Pandas documentation und die Numpy documentation, konnte aber kein klares Bild bekommen.

Jede direkte Erklärung mit einem Beispiel wird sehr geschätzt.

+3

https://stackoverflow.com/q/21494489/2285236 – ayhan

Antwort

1

Wie in der Dokumentation von pandas.DataFrame.sample beschrieben, akzeptieren die random_state Parameter entweder eine ganze Zahl (wie in diesem Fall) oder ein numpy.random.RandomState, der ein Behälter für einen Mersenne Twister Pseudozufallszahlengenerator ist.

Wenn Sie eine Ganzzahl übergeben, wird diese als seed für einen Pseudozufallszahlengenerator verwendet. Wie der Name bereits sagt, erzeugt der Generator keine echte Zufälligkeit. Es hat eher einen internen Status (den Sie erhalten können, indem Sie np.random.get_state() aufrufen), das basierend auf einem Seed initialisiert wird. Wenn es von demselben Seed initialisiert wird, wird es dieselbe Sequenz von "Zufallszahlen" reproduzieren.

Wenn Sie einen RandomState übergeben, wird dieser (bereits initialisierte/gesetzte) RandomState verwendet, um Pseudozufallszahlen zu erzeugen. Dadurch erhalten Sie auch reproduzierbare Ergebnisse, indem Sie beim Initialisieren von RandomState einen festen Seed festlegen und diesen RandomState anschließend übergeben. Eigentlich sollten Sie dies vor dem Setzen der Samen von Numpys internen RandomState bevorzugen. Die Begründung wird in dieser answer von Robert Kern und den Kommentaren dazu erläutert. Die Idee ist, einen unabhängigen Strom zu haben, der verhindert, dass andere Teile des Programms Ihre Reproduzierbarkeit durch Ändern der Saat von Numpys internen RandomState durcheinander bringen.