问题引入

在平时的项目中主要做的分类或者回归的问题比较多,对于时序的一些问题的建模的话,在交叉验证的这个角度应该如何去选择训练集和测试集呢?

问题解答

交叉验证(CV)是一项很流行的技术,用于调节超参数,是一种具备鲁棒性的模型性能评价技术。两种最常见的交叉验证方式分别是 k 折交叉验证和 hold-out 交叉验证。那么可以很明显的看到,我们的时序问题中肯定不能用k折交叉验证,因为时序的数据是有依赖的。

目前来说主要的在时间序列建模中的交叉验证方法主要有

1.预测后一半(Predict Second Half)
这种方法如下图,只有一次训练/测试分割。它的优势是这种方法易于实现;然而,它仍然面临着任意选择测试集的局限性。前一半数据(按照时间分割的)作为训练集,后一半数据成为测试集。验证集的大小可以根据给定问题的不同而变化(例如图中的例子用一天的数据作为验证集),但是保证验证集的时间顺序在训练子集后面是非常重要的。

时序问题中的交叉验证怎么做?_java

2.日前向链(Day Forward-Chaining)
预测后一半嵌套交叉验证方法的一个缺陷是 hold-out 测试集的任意选择会导致在独立测试集上预测误差的有偏估计。简单说就是一次太少,进行多次训练/测试分割可以解决这个问题。使用日前向链技术是一种基于前向链(Forward-Chaining)的方法(在文献中也被称为 rolling-origin evaluation(Tashman,2000)和 rolling-origin-recalibration evaluation(Bergmeir & Benitez,2012))。将每天的数据作为测试集,并将以前的所有数据分配到训练集中。简单的来说就是滑动预测,这点从图中可以明了,就不做详细的介绍了。

时序问题中的交叉验证怎么做?_java_02

参考

[1]https://blog.csdn.net/Datawhale/article/details/102547892

[2]https://zhuanlan.zhihu.com/p/38947625

[3]https://zhuanlan.zhihu.com/p/98532085


喜欢就关注一下啦~~~


时序问题中的交叉验证怎么做?_java_03