我有一个按日期索引的
pandas
数据框。我们假设从 1 月 1 日到 1 月 30 日。我想将此数据集拆分为 X_train、X_test、y_train、y_test 但我不想混合日期,因此我希望将训练样本和测试样本除以特定日期(或索引)。我正在努力
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
但是当我检查这些值时,我发现日期是混合的。我想将我的数据拆分为:
Jan-1 to Jan-24
进行训练,Jan-25 to Jan-30
进行测试(因为 test_size 为 0.2,这使得 24 个用于训练,6 个用于测试)
我该怎么做?
你应该使用
X_train, X_test, y_train, y_test = train_test_split(X,Y, shuffle=False, test_size=0.2, stratify=None)
不要使用
random_state=None
它将需要numpy.random
在这里提到使用
shuffle=False
和stratify=None
尝试使用TimeSeriesSplit:
X = pd.DataFrame({'input_1': ['a', 'b', 'c', 'd', 'e', 'f'],
'input_2': [1, 2, 3, 4, 5, 6]},
index=[pd.datetime(2018, 1, 1),
pd.datetime(2018, 1, 2),
pd.datetime(2018, 1, 3),
pd.datetime(2018, 1, 4),
pd.datetime(2018, 1, 5),
pd.datetime(2018, 1, 6)])
y = np.array([1, 0, 1, 0, 1, 0])
这导致
X
成为
input_1 input_2
2018-01-01 a 1
2018-01-02 b 2
2018-01-03 c 3
2018-01-04 d 4
2018-01-05 e 5
2018-01-06 f 6
tscv = TimeSeriesSplit(n_splits=3)
for train_ix, test_ix in tscv.split(X):
print(train_ix, test_ix)
[0 1 2] [3]
[0 1 2 3] [4]
[0 1 2 3 4] [5]