python train_test_split(shuffle=False)是否适用于时间序列?

nfs0ujit  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(296)

sklearn.model_selection.train_test_split(shuffle=False)方法是否适用于时间序列预测?或者在处理时间序列时,不应使用此方法执行训练和测试集拆分?
很多人认为不应该使用train_test_split,因为它是随机拆分的,会导致数据泄漏,但是如果shuffle=False的设置正是为了定义训练集和测试集之间不应该有数据泄漏,那么为什么不对时间序列使用train_test_split(shuffle=False)呢?
我知道TimeSeriesSplit,但我仍然想了解使用train_test_split(shuffle=False)表示时间序列是否正确。

tzdcorbm

tzdcorbm1#

在处理时间序列数据时,你不应该做随机分割,因为你需要保持数据的连续性,所以你应该使用另一种方法,比如sklearn.model_selection.TimeSeriesSplit
这将允许创建遵循数据时间元素的多个数据折叠,并保持对旧(过去)数据的训练和对新(未来)数据的测试(预测)。
通过使用shuffle=True,您可以随机地移动数据,这在某些情况下是有用的,但在处理基于时间的数据时就不行了,因此您应该使用shuffle=False
另一种方法是手动分割数据,比如说,将前80%用于train(过去),后20%用于test(将来),但是如果可以的话,使用已经为我们编写的函数会更容易。
您可以在这里阅读更多信息:TimeSeriesSplit.

hgc7kmma

hgc7kmma2#

以下是对在处理时间序列时不适合重排数据的原因的简单解释:
想象一下,你有一堆数据点,它们代表了一段时间内发生的事情,每个数据点都有一个时间戳,比如一个日期,告诉你事情发生的时间。
现在,假设您将所有数据点混合在一起并按不同的顺序排列,这就像 Shuffle 一样,这看起来是个好主意,因为它可以帮助您检查模型是否运行良好,但实际上不是个好主意,因为数据点的顺序很重要。
数据点就像一个故事,它们发生的顺序对于理解故事很重要。如果你打乱数据点,就像是乱了顺序讲故事,故事就没有意义了。如果数据没有意义,你的模型就很难从数据中学习。
因此,在处理时间序列数据时,务必使数据点按其发生的顺序排列。这样,您的模型才能从数据中学习并做出正确的预测。

相关问题