Scikit train_test_被一条裂缝分开

时间:2018-12-06 09:56:52

标签: python pandas scikit-learn scipy classification

我有一个按日期索引的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则进行测试)

我该怎么做?谢谢

2 个答案:

答案 0 :(得分:2)

您应该使用

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

here中提到将shuffle=Falsestratify=None一起使用

答案 1 :(得分:1)

尝试使用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]