Sklearn: получить последний сплит из timeSeriesSplit

Поэтому я использую timeSeriesSplit из sklearn для разделения мои данные такие,

tscv = TimeSeriesSplit(n_splits=3)

Теперь я знаю, что для получения индексов разделения нам нужно перебрать tscv.split(X). У меня вопрос: можно ли перейти непосредственно к последнему разбиению, не повторяя разбиения. Объект, возвращаемый функцией, не совсем список, поэтому я не уверен, как это сделать? Мне нужен только последний разделитель, так как мои данные большие и их нет. расколов также велико.

заранее спасибо


person SUMIT IIITD    schedule 01.07.2018    source источник


Ответы (1)


Метод Split в TimeSeriesSplit генерирует разделение индексов. Чтобы перейти к конкретному расколу, вам нужно выполнить итерацию до него. Он предназначен для перебора всех возможных разбиений для перекрестной проверки временных рядов.

Если размер тестовых данных в cv split равен s. Затем, независимо от того, сколько разбиений вы сделаете, последнее разбиение устанавливает train_data = all data except last s data point и test_data as last s data points. Итак, если вы хотите напрямую выполнить последнее разделение: нарежьте свои данные. Например, если ваши данные представляют собой массив 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]])

Также, если вы установили "max_train_size" при разделении. Тогда вам нужно позаботиться и об этом во время нарезки. Подробнее см. здесь в документации TimeSeriesSplit.

person Mankind_008    schedule 01.07.2018
comment
В приведенном выше примере мне трудно понять, какое значение добавляется с помощью функции TimeSeriesSplit. Вся работа выполняется в следующих трех строках. Не могли бы вы уточнить? - person Anne; 21.08.2020
comment
@Anne Ответ был дан с учетом того, что пользователь использует как метод TimeSeriesSplit, так и последний срез, где-то в своем анализе. Если вы не собираетесь перебирать все разбиения, это вам бесполезно. - person Mankind_008; 27.08.2020