2015-01-21 108 views

回答

72

train_test_split將數組或矩陣分成隨機序列和測試子集。這意味着每次運行時都沒有指定random_state,您將得到不同的結果,這是預期的行爲。例如:

試驗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]] 

運行2

>>> train_test_split(a, b) 
[array([[8, 9], 
     [4, 5], 
     [0, 1]]), 
array([[6, 7], 
     [2, 3]]), [4, 2, 0], [3, 1]] 

它改變。另一方面,如果您使用random_state=some_number,那麼您可以保證運行1的輸出將等於運行2的輸出,即您的拆分總是相同的。 實際random_state的數字是42,0,21,...重要的是,每次使用42時,第一次進行分割時都會得到相同的輸出。 如果您想要可重現的結果(例如在文檔中),這非常有用,以便每個人在運行示例時都能始終看到相同的數字。 在實踐中,我會說,你應該設置random_state爲一些固定的數字,而你測試的東西,但如果你真的需要一個隨機的(而不是一個固定的)拆分,然後刪除它在生產。

關於你的第二個問題,僞隨機數發生器是一個數字發生器,它可以產生幾乎真正的隨機數。爲什麼他們不是真正隨機的超出了這個問題的範圍,並且在你的情況下可能無所謂,你可以看看here表格的更多細節。

+4

所以我應該設置什麼樣的隨機狀態,我通常會看到這個數字42. – 2015-01-22 04:58:01

+0

@ElizabethSusanJoseph,這沒什麼關係,如果我想要重現性,我總是使用0,否則我會使用0。可能是像42這樣的scikit人。 – elyase 2015-01-23 11:58:19

+15

這可能解釋了常用的數字42:http://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy – denson 2015-06-05 14:08:39