2017-07-20 28 views
2

我有以下代碼,我使用熊貓random_statePandas random_state究竟做了什麼?

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

這產生了樣本數據幀df_s。每次我使用相同的randomState運行代碼時,我都會得到相同的樣本df_s。當我將123的值更改爲12時,樣本也會發生變化,所以我猜這就是random_state所做的。

我這個愚蠢的問題:數字變化如何影響樣本變化? 我讀了Pandas documentationNumpy documentation,但無法得到清晰的圖像。

任何直接的解釋與例子將不勝感激。

+3

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

回答

1

作爲pandas.DataFrame.sample的文檔中所描述的,random_state參數接受任一的整數(如在你的情況下)或numpy.random.RandomState,這是一個Mersenne扭曲僞隨機數發生器的容器。

如果您傳遞一個整數,它將使用這個作爲僞隨機數生成器的seed。正如名字所說,生成器不會產生真正的隨機性。它有一個內部狀態(可以通過調用np.random.get_state()得到),該狀態是基於種子初始化的。當由相同種子初始化時,它將再現相同的「隨機數」序列。

如果您將它傳遞給RandomState,它將使用此(已初始化/播種)RandomState生成僞隨機數。這也允許你在初始化RandomState的時候設置一個固定的種子,然後傳遞這個RandomState來獲得可重複的結果。其實你應該更喜歡這個設置numpys內部RandomState的種子。羅伯特克恩在這answer和解釋的理由。這個想法是有一個獨立的流,防止程序的其他部分通過改變numpys內部RandomState的種子來搞亂你的可重複性。