gpt4 book ai didi

python - 在测试和训练数据集中使用基于时间的拆分来拆分数据

转载 作者:行者123 更新时间:2023-12-02 11:24:52 24 4
gpt4 key购买 nike

我知道train_test_split随机拆分它,但我需要知道如何根据时间拆分它。

  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) 
# this splits the data randomly as 67% test and 33% train
如何根据时间拆分相同的数据集作为 67% 的训练和 33% 的测试?数据集有一列 TimeStamp。
我尝试搜索类似的问题,但不确定该方法。
有人能简单解释一下吗?

最佳答案

在时间序列数据集上,数据拆分以不同的方式进行。 See this link了解更多信息。或者,您可以尝试 TimeSeriesSplit来自 scikit-learn 包。所以主要思想是这样的,假设您根据时间戳有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]))

关于python - 在测试和训练数据集中使用基于时间的拆分来拆分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50879915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com