3
我已经搜索了sklearn docs for TimeSeriesSplit
和docs for cross-validation,但我一直未能找到一个工作示例。如何使用TimeSeriesSplit和GridSearchCV对象在scikit-learn中调整模型?
我正在使用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
是一个没有长度的迭代器。然而,docs for GridSearchCV
状态,我可以用一个
INT,交叉验证发电机或迭代,可选
我试着用TimeSeriesSplit
没有.split(X)
,但它仍然没有奏效。
我确定我忽略了一些简单的东西,谢谢!
尝试使用'my_cv = [(火车,测试),用于火车,测试在TimeSeriesSplit(n_splits = 2).split(X) ]' –
这工作,谢谢!但是,该函数不应该与迭代器一起工作吗?当观察次数很多时(如果折叠次数较多,我会更糟糕),我宁愿不要在内存中保存那些大阵列 – cd98
是的。你应该在scikit-learn github页面上发布一个问题。 –