Wie verwende ich einen TimeSeriesSplit mit einem GridSearchCV Objekt zu Stimmen, ein Modell in scikit-learn?
Ich gesucht habe die sklearn docs für TimeSeriesSplit
und die docs für die cross-Validierung aber ich habe nicht in der Lage zu finden, ein funktionierendes Beispiel.
Ich bin mit sklearn version 0.19.
Dies ist mein setup
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)
gibt:
[0 1] [2 3]
[0 1 2 3] [4 5]
Wenn ich versuchen:
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)
gibt es: TypeError: object of type 'generator' has no len()
Bekomme ich das problem: GridSearchCV
ist versucht zu rufen len(cv)
aber my_cv
ist ein iterator, ohne Länge. Jedoch, die docs für GridSearchCV
Zustand kann ich mit einem
int, cross-validation-generator oder ein iterierbar, optional
Versuchte ich mit TimeSeriesSplit
ohne die .split(X)
aber es funktioniert immer noch nicht.
Ich bin sicher, ich bin etwas Blick einfach, danke!!
- Versuchen Sie es mit
my_cv = [(train,test) for train, test in TimeSeriesSplit(n_splits=2).split(X)]
- das funktioniert, vielen Dank! Aber sollte nicht die Funktion der Arbeit mit einem iterator? Wenn die Anzahl der Beobachtungen sehr groß ist schlimmer, wenn die Anzahl der Falten ist groß), die ich lieber nicht halten die großen arrays im Speicher, wenn möglich
- Ja, es sollte. Sollten Sie post ein Problem auf der scikit-learn github-Seite.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, das problem war ich war mit
GridSearchCV
aussklearn.grid_search
, die veraltet ist. ImportierenGridSearchCV
aussklearn.model_selection
ist das problem gelöst:gibt: