2017-10-13 27 views
3

sklearn docs for TimeSeriesSplitdocs for cross-validationを検索しましたが、実際の例は見つかりませんでした。Scikit-learnでモデルを調整するには、GridSearchCVオブジェクトでTimeSeriesSplitを使用するにはどうすればよいですか?

私はsklearnバージョン0.19を使用しています。私がしようとした場合

[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がある

この

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) 

が与える私の設定ですt電話をかけてlen(cv)と呼んでいますが、my_cvは長さのないイテレータです。しかし、私は

int型、クロスバリデーション発生器または反復可能な、オプションの

を使用することができますdocs for GridSearchCV状態は私が.split(X)なしTimeSeriesSplitを使用してみましたが、それはまだ動作しませんでした。

私は何かを見落としていると確信しています、感謝!

+1

は 'my_cv = [(列車、テスト)列車のため、試験TimeSeriesSplitに(n_splits = 2).split(X)を使用してみてください] ' –

+0

が動作します、ありがとう!しかし、関数はイテレータで動作してはいけませんか?観測の数が多い場合(折り畳みの数が多い場合は悪化する)、可能であれば、大きな配列をメモリに保持しないでください。 – cd98

+1

はい、そうです。 scikit-learn githubページに問題を投稿する必要があります。 –

答えて

4

sklearn.grid_searchからGridSearchCVを使用していた問題が判明しました。これは廃止予定です。 sklearn.model_selectionからGridSearchCVをインポートする問題を解決:

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) 
関連する問題