我熟悉“常规”交叉验证,但现在我想在使用带有简单线性回归函数的交叉验证时进行时间序列预测。我写了一个简单的例子,以帮助澄清我的两个问题:一个关于训练/测试拆分的问题,一个关于当目标是预测不同的 n 时如何训练/测试模型的问题,预测步骤为 n,在进步。
(1)数据
假设我有时间点 1、...、10 的数据,如下所示:
timeseries = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]
(2)将数据转换成对监督学习有用的格式
据我了解,我们可以使用“滞后”,即数据的变化来创建适合监督学习的数据集:
input = [NaN,0.5,0.3,10,4,5,6,1,0.4,0.1]
output/response = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]
在这里,我只是将时间序列移动了一个以创建输出向量。据我了解,我现在可以使用输入作为线性回归模型的输入,并使用输出作为响应(NaN 可以近似为我们用随机值替换)。
(3) 问题一:交叉验证(“回测”)
假设我现在想做 2-splits,我是否必须改变火车和测试集?
即类似的东西:
动车组:
自变量:[NaN,0.5,0.3,10,4,5]
输出/响应变量:[0.5,0.3,10,4,5,6]
测试集:
自变量:[1,0.4,0.1]
输出/响应变量:[0.4,0.1,0.9]
(ii) 问题 2:提前预测不同的滞后:
很明显,我已将因变量转移到自变量 1。假设现在我想训练一个可以提前预测 5 个时间步长的模型——我可以保持这个滞后一个,但仍然使用该模型来预测 n+1 ,...,n+5,... 还是我将自变量到因变量的转换更改为 5?究竟有什么区别?