时间序列的交叉验证

时间:2018-04-30 09:55:34

标签: 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]])? 当然,我阅读了页面上的注释,但仍然不理解

1 个答案:

答案 0 :(得分:1)

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

我们如何解释这两个特征可能会引起争议:

  1. 我们可以将每个实例视为具有一组功能的特定时间点的单个样本。或...
  2. 我们可以将每个实例视为一组时间点,在一个时间间隔内定义实例本身。
  3. 这两个选项对我来说都是正确的。虽然我们如何解释X的结构,但这里的问题是TimeSeriesSplit如何分割数据,避免测试数据实例与之前训练数据实例的时间步骤。