我已经搜索过sklearn文档中的
我正在使用sklearn版本0.19。
这是我的设置。
TimeSeriesSplit
和交叉验证文档,但是我没有找到一个可用的示例。我正在使用sklearn版本0.19。
这是我的设置。
import xgboost as xgb
from sklearn.model_selection import TimeSeriesSplit
from sklearn.grid_search import GridSearchCV
import numpy as np
X = np.array([[4, 5, 6, 1, 0, 2], [3.1, 3.5, 1.0, 2.1, 8.3, 1.1]]).T
y = np.array([1, 6, 7, 1, 2, 3])
tscv = TimeSeriesSplit(n_splits=2)
for train, test in tscv.split(X):
print(train, test)
提供:
[0 1] [2 3]
[0 1 2 3] [4 5]
如果我尝试:
model = xgb.XGBRegressor()
param_search = {'max_depth' : [3, 5]}
my_cv = TimeSeriesSplit(n_splits=2).split(X)
gsearch = GridSearchCV(estimator=model, cv=my_cv,
param_grid=param_search)
gsearch.fit(X, y)
错误信息为: TypeError: object of type 'generator' has no len()
问题出在: GridSearchCV
尝试调用 len(cv)
, 但是 my_cv
是一个没有长度的迭代器。然而,关于GridSearchCV
的文档表明我可以使用
int、交叉验证生成器或可迭代对象,可选参数
我尝试使用 TimeSeriesSplit
而没有使用 .split(X)
, 但还是不行。
我确定我正在忽略一些简单的东西,谢谢!
my_cv = [(train,test) for train, test in TimeSeriesSplit(n_splits=2).split(X)]
。 - Vivek Kumar