Sklearn:从timeSeriesSpli获取最后一次拆分

2024-09-28 21:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用sklearn的timeSeriesSplit来拆分数据

tscv = TimeSeriesSplit(n_splits=3)

现在我知道为了得到分割索引,我们必须迭代tscv.split(X)。我这里的问题是,是否可以直接到达最后一个拆分,而不需要迭代这些拆分。函数返回的对象不完全是一个列表,所以我不确定如何执行此操作?我只需要最后一次拆分,因为我的数据很大,而且拆分的数量也很大。在

提前谢谢


Tags: 数据对象函数列表数量sklearnsplitsplits
2条回答

你可以试试这个

def get_last_cv(splits):
    splits_deque = deque(splits, maxlen=1)
    last_element = splits_deque.pop()
    train,test = last_element
    return train,test

然后得到这样的指数

^{pr2}$

其中X是您的数据

Split方法在TimeSeriesSplit中生成索引的拆分为了得到特定的分割,你需要迭代到它它被用来迭代时间序列交叉验证的所有可能的分割。在

如果cv分割中测试数据的大小等于s。然后,不管您进行多少次拆分,最后一次拆分集train_data=all data except last s data point和{}。所以,如果您想直接进行最后一次拆分:将数据切片。例如,如果数据是一个numpy数组X

import numpy as np
from sklearn.model_selection import TimeSeriesSplit
X = np.array([[1, 2], [0, 4], [1, 2], [2, 4] ,[1, 2], [7, 4], [8, 2], [5, 4]])

n_splits = 2                                       # select no of splits required
tscv = TimeSeriesSplit(n_splits = n_splits)

n_samples = X.shape[0]                             # this is how test_size (s)
s = n_samples//(n_splits + 1)                      # is evaluated internally              

X_train_last, X_test_last = X[ :-s], X[-s: ]       # s=2 for this split

X_train_last
# array([[1, 2],
#        [0, 4],
#        [1, 2],
#        [2, 4],
#        [1, 2],
#        [7, 4]])

X_test_last
# array([[8, 2],
#       [5, 4]])

此外,如果您在拆分时设置了“最大列车大小”。那你在切片的时候也要注意这个问题。有关详细信息,请参阅TimeSeriesSplitdocumentation here

相关问题 更多 >