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.
InformationsquelleAutor cd98 | 2017-10-13
Schreibe einen Kommentar