我想在TimeSeriesSplit
中使用RandomSearchCV
。
看下面的例子。
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
df = pd.DataFrame(X, columns = ['one', 'two'])
df.index = [0,0,0,1,1,2]
df
one two
0 1 2
0 3 4
0 1 2
1 3 4
1 1 2
2 3 4
说我想将X
拆分为:
0,0,0
的行,而验证集为索引为1,1
的行0,0,0,1,1
的行和验证集为索引2
的行我尝试将TimeSeriesSplit
与n_splits = 2
一起使用,但无法获得想要的结果。
tscv = TimeSeriesSplit(n_splits=2)
for train_index, test_index in tscv.split(df.index):
print(df.index[train_index], df.index[test_index])
Int64Index([0, 0], dtype='int64') Int64Index([0, 1], dtype='int64')
Int64Index([0, 0, 0, 1], dtype='int64') Int64Index([1, 2], dtype='int64')
P.S:如果不能使用TimeSeriesSplit,我可以使用PredefinedSplit吗?
答案 0 :(得分:0)
如果要基于索引过滤行,可以使用loc
中的DataFrames
方法:
例如,对于您的初始数据划分,您具有:
>>> df.loc[[0]] # train set
one two
0 1 2
0 3 4
0 1 2
>>> df.loc[[1]] # validation set
one two
1 3 4
1 1 2
对于第二个拆分,您具有:
>>> df.loc[[0,1]] # train set
one two
0 1 2
0 3 4
0 1 2
1 3 4
1 1 2
>>> df.loc[[2]] # validation set
one two
2 3 4