在时间序列数据集上,数据拆分以不同的方式发生。有关更多信息,请参阅此链接。或者,您可以尝试scikit-learn 包中的TimeSeriesSplit。所以主要思想是这样的,假设你根据时间戳有10个数据点。现在拆分将是这样的:
Split 1 :
Train_indices : 1
Test_indices : 2
Split 2 :
Train_indices : 1, 2
Test_indices : 3
Split 3 :
Train_indices : 1, 2, 3
Test_indices : 4
Split 4 :
Train_indices : 1, 2, 3, 4
Test_indices : 5
等等等等。您可以查看上面链接中显示的示例,以更好地了解 TimeSeriesSplit 在 sklearn 中的工作方式
更新
如果您有一个单独的时间列,您可以简单地根据该列对数据进行排序,然后如上所述应用 timeSeriesSplit 来获取拆分。
为了确保最终拆分中 67% 的训练数据和 33% 的测试数据,指定拆分数如下:
no_of_split = int((len(data)-3)/3)
例子
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4],[1, 2], [3, 4],[3, 4],[1, 2], [3, 4],[3, 4],[1, 2], [3, 4] ])
y = np.array([1, 2, 3, 4, 5, 6,7,8,9,10,11,12])
tscv = TimeSeriesSplit(n_splits=int((len(y)-3)/3))
for train_index, test_index in tscv.split(X):
print("TRAIN:", train_index, "TEST:", test_index)
#To get the indices
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
输出 :
('TRAIN:', array([0, 1, 2]), 'TEST:', array([3, 4, 5]))
('TRAIN:', array([0, 1, 2, 3, 4, 5]), 'TEST:', array([6, 7, 8]))
('TRAIN:', array([0, 1, 2, 3, 4, 5, 6, 7, 8]), 'TEST:', array([ 9, 10, 11]))
</p>