TimeSeriesSplit
- это вариация KFold
, которая обеспечивает восходящие значения индекса для каждого последующего сгиба.Как отмечено в документах:
В каждом разделении индексы теста должны быть выше, чем раньше ... [также] обратите внимание, что в отличие от стандартных методов перекрестной проверки, последовательные обучающие наборы являются надмножествами тех, которые приходятперед ними.
документы
Также помните, что KFold
и TimeSeriesSplit
возвращают индексы .У вас уже есть нужный индекс.
Одна из проблем заключается в том, что доступ к срезу DateTimeIndex в MultiIndex слишком сложен и сложен.См. здесь , здесь и здесь .Так как вы все равно извлекаете данные на этом этапе, сброс индекса и среза кажется приемлемым.Тем более что сброс индекса не происходит на месте.
Наконец, я рекомендую привести этот подобный дате и времени индекс к фактическому типу данных даты и времени.
import pandas as pd
import numpy as np
import datetime
arrays = [np.array(['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'D', 'D']),
np.array(['2000-01', '2000-02', '2000-03', '1999-12', '2000-01',
'2000-01', '2000-02', '1999-12', '2000-01', '2000-02', '2000-03'])]
# Cast as datetime
arrays[1] = pd.to_datetime(arrays[1])
df = pd.DataFrame(np.random.randn(11, 4), index=arrays)
df.index.sort_values()
folds = df.reset_index() # df still has its multindex after this
# You can tack an .iloc[:, 2:] to the end of these lines for just the values
# Use your predefined conditions to access the datetimes
fold1 = folds[folds["level_1"] <=datetime.datetime(2000, 1, 1)]
fold2 = folds[folds["level_1"] == datetime.datetime(2000, 2, 1)]
fold3 = folds[folds["level_1"] == datetime.datetime(2000, 3, 1)]