时间序列数据的模型参数选择

对于模型参数的选择,我们通常会进行带有交叉验证的网格搜索,以测试哪些参数比其他参数更优。

这种方法对一般的训练数据是适用的,比如这个,但如果数据之间存在时间关系,比如每天的销售数据或股票数据,直接进行交叉验证是否合适?

因为交叉验证会使用kFold方法在训练数据中随机分割,这意味着对于时间序列数据,近期的日子信息会被用于训练早期的日子。

如何对时间序列数据进行参数选择或交叉验证?


回答:

是的,通常更常见的是使用回测或滚动预测方法,在这种方法中,你可以使用前N个时间段的数据进行训练,或者使用所有直到N的时间段的数据进行训练,然后在N+k期(k>=1)进行测试,或者甚至可以测试一系列未来的时间段。(例如,使用过去60个月的数据进行训练,然后预测未来12个月)。但具体细节真的取决于你使用的模型和问题领域。Rob Hyndman提供了一个具体的例子,你可以通过搜索“kaggle contest time series data cross validation”找到更多例子。

在某些情况下,按时间进行分层随机分割是有意义的。然后在训练分割上进行上述描述的滚动训练和CV评估,并在随机测试保留集上单独进行滚动测试评估。

在某些情况下,你可以进行普通的随机CV,其中时间只是另一个特征值(通常编码为多个工程化的时间特征,比如cos(2 pi hour_of_day / 24)sin(2 pi hour_of_day / 24)cos(2 pi hour_of_week / 168)等)。这种方法通常对像XGBoost这样的模型更有效,允许模型发现数据中的时间依赖关系,而不是在训练/测试方案中对其进行编码。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注