Более простой способ использования TimeSeriesSplit с постоянным размером набора проверки? - PullRequest
0 голосов
/ 31 августа 2018

Наборы поездов / проверки, которые требуются для параметра cv в GridSearchCV, должны выглядеть примерно так:

[1,2,3][4]
[1,2,3,4][5]
[1,2,3,4,5][6]

Для решения этой проблемы я переписал индексы в функции TimeSeriesSplit:

tscv = TimeSeriesSplit(n_splits=8)
cv_start = round(len(dataframe) * 0.98)
count = -1
for train_index, test_index in tscv.split(trainY):
    count += 1
    train_index = list(range(cv_start + count))
    test_index = list(range(cv_start + count, cv_start + count +1))
    print(train_index, test_index)

Есть ли более простой или чистый способ сделать это?

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете выбрать n_splits таким образом, чтобы набор тестов содержал то, что вы хотите.

Подобная идея используется в моем другом ответе здесь: -

Предположим, что у вас есть 6 образцов:

import numpy as np
X = np.array([1,2,3,4,5,6,7]()

# Here put the number you want in test data,
# I used 1 because your example has only 1 test data in each split
num_in_test = 1

test_size = float(num_in_test) / len(X)

n_splits = int((1//test_size)-1)

tscv = TimeSeriesSplit(n_splits=n_splits)

for train_index, test_index in tscv.split(X):
    print(X[train_index], X[test_index])

# Output
(array([1]), array([2]))
(array([1, 2]), array([3]))
(array([1, 2, 3]), array([4]))
(array([1, 2, 3, 4]), array([5]))
(array([1, 2, 3, 4, 5]), array([6]))
(array([1, 2, 3, 4, 5, 6]), array([7]))

После исправления n_splits вы можете легко передать объект TimeSeriesSplit в GridSearchCV или любую другую утилиту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...