繁体   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