簡體   English   中英

train_test_split(shuffle=False) 適用於時間序列嗎?

[英]Is train_test_split(shuffle=False) appropriate for time series?

sklearn.model_selection.train_test_split(shuffle=False) 方法是否適合時間序列預測? 或者在處理時間序列時永遠不應該使用這種方法來執行訓練和測試集拆分?

許多人認為不應使用train_test_split ,因為它會隨機進行拆分,從而導致數據泄漏。 但是,如果shuffle=False的設置恰恰是為了定義訓練集和測試集之間不應該有數據泄漏,為什么不對時間序列使用train_test_split(shuffle=False)呢?

我知道TimeSeriesSplit ,但我仍然想了解將train_test_split(shuffle=False)用於時間序列是否正確。

在處理時間序列數據時,您不應該進行隨機拆分,因為您需要保持數據的連續性。 因此,您應該使用另一種方法,例如sklearn.model_selection.TimeSeriesSplit

這將允許創建遵循數據時間元素的多個數據折疊,並繼續對較舊(過去)的數據進行培訓,並對較新(未來)的數據進行測試(預測)。

通過使用shuffle=True ,您可以隨機打亂數據,這在某些情況下很有用,但在處理基於時間的數據時則不然。 所以你應該使用shuffle=False

另一種方法是手動拆分數據,比如將前 80% 用於訓練(過去),將最后 20% 用於測試(未來),但如果可用的話,使用已經為我們編寫的函數會更容易。

您可以在此處閱讀更多相關信息: TimeSeriesSplit

這是一個簡單的解釋,說明為什么在處理時間序列時打亂數據不是一個好主意:

想象一下,您有一堆數據點代表隨時間發生的事情。 每個數據點都有一個時間戳,如日期,告訴您它發生的時間。

現在,假設您將所有數據點混合在一起並以不同的順序排列。 這就像洗牌一樣。 這似乎是個好主意,因為它可以幫助您檢查 model 是否正常工作,但實際上這不是一個好主意,因為數據點的順序很重要。

數據點就像一個故事,它們發生的順序對於理解這個故事很重要。 如果把數據點打亂,就好像講故事的順序亂了,就沒有意義了。 如果數據沒有意義,你的 model 很難從數據中學習。

因此,當您處理時間序列數據時,按數據點發生的順序排列數據點很重要。 這樣,您的 model 就可以從數據中學習並做出良好的預測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM