J'ai recherché le sklearn docs for TimeSeriesSplit
et le docs for cross-validation mais je n'ai pas pu trouver un exemple de travail. J'utilise Sklearn Version 0.19.Comment utiliser une TimeSeriesSplit avec un objet GridSearchCV pour ajuster un modèle dans scikit-learn?
C'est ma configuration
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)
donne:
[0 1] [2 3]
[0 1 2 3] [4 5]
Si je tente:
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)
donne: TypeError: object of type 'generator' has no len()
je reçois le problème: GridSearchCV
est t riant pour appeler len(cv)
mais my_cv
est un itérateur sans longueur. Cependant, l'état docs for GridSearchCV
je peux utiliser un
int, générateur de validation croisée ou un itératives, en option
J'ai essayé d'utiliser TimeSeriesSplit
sans .split(X)
mais il ne fonctionne toujours pas.
Je suis sûr que je néglige quelque chose de simple, merci !!
Essayez d'utiliser 'my_cv = [(train, test) pour le train, le test en TimeSeriesSplit (n_splits = 2) .split (X) ] ' –
qui fonctionne, merci! Mais la fonction ne devrait-elle pas fonctionner avec un itérateur? Quand le nombre d'observations est grand (pire si le nombre de plis est grand) je préfère ne pas garder ces grands tableaux en mémoire si possible – cd98
Oui, il devrait le faire. Vous devriez signaler un problème sur la page de github de scikit-learn. –