这是一个概念问题,而不是技术问题。我有兴趣执行滚动(滑动)窗口分析,我的目标是预测我的时间序列的下一个值的标签('0'或'1')。例如,考虑时间序列数据和标签数组:(我使用 Python 和 sklearn)
ts = array([11, 15, 3, 18, 6, 10, 9, 25, 7, 15])
lab = array([ 0, 0, 0, 1, 1, 0, 0, 1, 0, 1])
我正在做的是尝试学习一个函数'F',它将输入特征(从'ts'数组的窗口中提取)映射到二进制标签'lab' F(feat(ts)) -> lab
:。从概念上讲,这个问题等价于以下一个时间戳为条件的大小为 k 的窗口的标记。
F(ts[i:i+3]) -> lab[i+3]
实际上:考虑一个大小为 3 的窗口,然后我们得到:
F([11,15, 3]) -> y = 1
F([15, 3,18]) -> y = 1
F([ 3,18, 6]) -> y = 0
F([18, 6,10]) -> y = 0
F([ 6,10, 9]) -> y = 1
F([10, 9,25]) -> y = 0
F([ 9,25, 7]) -> y = 1
(最后一个值未使用)。真实的时间序列要长得多。
问题:对于训练、测试和交叉验证,我可以(假装和)使用我的实例作为 iid 吗?我的意思是:我可以将实例随机划分为训练集、验证集和测试集吗?
当然,它们不是独立同分布的,但是当我天真地尝试处理我的数据并学习分类器(简单逻辑回归)时,它出人意料地工作得非常好,并且我在分类指标上得到了相当合理的结果。
编辑
我正在阅读关于评估时间序列预测的交叉验证有效性的论文 A Note on the Validity of Evaluating Time Series Prediction,作者明确指出:“....和 CV 可以而且应该在不修改的情况下使用,就像在独立案例中一样.. "