python - 时间序列的交叉验证

标签 python machine-learning scikit-learn

我正在使用 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]]) 背后的逻辑是什么? 当然我看了页面上的注释,但还是不明白

最佳答案

通常在时间序列数据中,您希望根据 X[0:t-1] 数据预测 y[t]。此 sklearn.model_selection.TimeSeriesSplit 方法似乎将大小为 N 的单个完整时间序列 X 作为参数(其中 N 是不同时间步的实例数)及其在每个时间步对应的标签y。然后,X 形状为 (4,2),因为我们在不同的时间步有四个实例,每个实例有 2 个特征。

我们如何解释这两个特征可能存在争议:

  1. 我们可以将每个实例视为具有一组特征的特定时间点的单个样本。或者……
  2. 我们可以将每个实例视为一组时间点,在时间间隔内定义实例本身。

这两个选项对我来说似乎都是正确的。尽管我们可以如何解释 X 的结构,但这里的问题是 TimeSeriesSplit 如何拆分数据,避免从训练数据实例的先前时间步长测试数据实例。

关于python - 时间序列的交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50098066/

相关文章:

python - Pandas Dataframe 添加缺少的时间戳行,然后向前填充以前的值

python - 通过 cross_val 保存 sklearn 分类器拟合

python - 解释来自 RandomForestClassifier 的特征重要性值

tensorflow - 将 Min Max Scaling 应用于测试集不是很危险吗?

python-2.7 - 如何解释决策树的图形结果并找到最具信息性的特征?

python - 为了使用 Python 从 Rust 程序内部调用函数,应遵循的最佳实践是什么?

Python:在与数据库相关的任务中我应该使用多进程或多线程吗?

python - 视觉代码 pylint : unable to import webapp2 and google. appengine.api

python - 我是否很好地理解词嵌入(例如逻辑回归)的使用?

machine-learning - 使用强化学习解决分类问题