Возможно, я делаю что-то не так, но мне кажется, что в текущей реализации строка my_cv = TimeSeriesSplit (n_splits = 2) .split (X) должна быть исправлена ​​на my_cv = TimeSeriesSplit (n_splits = 2). В противном случае он выдаст ошибку

алсклеарн документы для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) но это все еще не сработало.

Я уверен, что я пропускаю что-то простое, спасибо!

 Vivek Kumar13 окт. 2017 г., 18:00
Да, это должно. Вы должны опубликовать проблему на странице gitub scikit-learn.
 Vivek Kumar13 окт. 2017 г., 17:12
Попробуйте использоватьmy_cv = [(train,test) for train, test in TimeSeriesSplit(n_splits=2).split(X)]
 cd9813 окт. 2017 г., 17:18
это работает, спасибо! Но не должна ли функция работать с итератором? Когда количество наблюдений велико (хуже, если количество сгибов велико), я бы предпочел не хранить эти большие массивы в памяти, если это возможно

Ответы на вопрос(1)

Решение Вопроса

проблема была в том, что я использовалGridSearchCV изsklearn.grid_search, что устарело. ИмпортGridSearchCV изsklearn.model_selection решена проблема:

import xgboost as xgb
from sklearn.model_selection import TimeSeriesSplit, 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)

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)

дает:

GridSearchCV(cv=<generator object TimeSeriesSplit.split at 0x11ab4abf8>,
       error_score='raise',
       estimator=XGBRegressor(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, gamma=0,
       learning_rate=0.1, max_delta_step=0, max_depth=3,
       min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
       objective='reg:linear', reg_alpha=0, reg_lambda=1,
       scale_pos_weight=1, seed=0, silent=True, subsample=1),
       fit_params=None, iid=True, n_jobs=1,
       param_grid={'max_depth': [3, 5]}, pre_dispatch='2*n_jobs',
       refit=True, return_train_score=True, scoring=None, verbose=0)
 Odisseo18 февр. 2019 г., 21:29
Возможно, я делаю что-то не так, но мне кажется, что в текущей реализации строка my_cv = TimeSeriesSplit (n_splits = 2) .split (X) должна быть исправлена ​​на my_cv = TimeSeriesSplit (n_splits = 2). В противном случае он выдаст ошибку

Ваш ответ на вопрос