python - 时间序列的交叉验证
问题描述
我正在使用 sklearn 中的 Timeseriessplit 函数来为时间序列的交叉验证创建训练集和测试集。例如,这个想法是使用 n-1 个数据点进行训练,使用第 n 个数据点进行测试。此拆分必须始终是有序的,因为它是一个时间序列。但是,我不明白,为什么示例中的数据集 X 的格式如下:
from sklearn.model_selection import TimeSeriesSplit
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
tscv = TimeSeriesSplit(n_splits=3)
print(tscv)
for train_index, test_index in tscv.split(X):
print("TRAIN:", train_index, "TEST:", test_index)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
将数据准备为 X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) 背后的逻辑是什么?当然,我阅读了页面上的注释,但仍然不理解
解决方案
通常在您希望根据数据进行预测y[t]
的时间序列数据中X[0:t-1]
。该sklearn.model_selection.TimeSeriesSplit
方法似乎将单个完整X
的大小时间序列N
(其中N
是不同时间步长的实例数)及其在每个时间步长的相应标签作为参数y
。然后,X
形状是 (4,2),因为我们有四个不同时间步长的实例,每个实例有 2 个特征。
我们如何解释这两个特征可能会引起争议:
- 我们可以将每个实例视为具有一组特征的特定时间点的单个样本。或者...
- 我们可以将每个实例视为一组时间点,在时间间隔内定义实例本身。
这两个选项对我来说似乎都是正确的。尽管我们可以如何解释 的结构X
,但这里的问题是如何TimeSeriesSplit
将数据从训练数据实例的先前时间步中拆分出来,避免测试数据实例。
推荐阅读
- bazel - 如何防止 Bazel 覆盖内置宏 __DATE__ 和 __TIME__ 的值?
- java - 使用 Java 8 谓词改进代码 - 比较多个参数
- node.js - Hyperledger Fabric Node.js SDK:离线交易签名问题
- python - 如何使用python pandas(Dataframes)从多个excel文件中删除前4行
- c++ - 用 new(pFoo) Foo() 清除类 Foo
- c# - 来自字符串的嵌套表达式
- android-listview - listview 按钮未向其他活动发送正确的号码
- typescript - 在 TypeScript 中扩展和接口并将其设置为等于某些东西(泛型)?
- hibernate - 如何在 Grails 3 中将属性传递给 Enver?
- java - Spring Boot:使用具有基本身份验证的安全 API