Как использовать model.evals_result () в Xgboost, если я использую GridsearchCV? - PullRequest
0 голосов
/ 22 октября 2019

Я использую регрессор xgboost, и у меня возник вопрос о том, как использовать model.evals_result (), если я использую GridsearchCV

Я знаю, что если я не использую Gridsearch, я могу получить то, что хочу, используякод ниже

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.33, random_state=1,shuffle=False)

evals_result = {}
eval_s = [(X_train, y_train), (X_test, y_test)]

gbm = xgb.XGBRegressor()
gbm.fit(X_train, y_train,eval_metric=["rmse"],eval_set=eval_s)

results = gbm.evals_result()

Но я не могу получить evals_result (), если я использую GridsearchCV в своем коде (см. ниже).

кто-нибудь подскажет?

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.33, random_state=1,shuffle=False)

gbm_param_grid = {'learning_rate': [.01, .1, .5, .9],
                          'n_estimators': [200, 300],
                          'subsample': [0.3, 0.5, 0.9]
                          }

fit_params = {"early_stopping_rounds": 100,
                      "eval_metric": "mae",
                      "eval_set": [(X_train, y_train), (X_test, y_test)]}

evals_result = {}
eval_s = [(X_train, y_train), (X_test, y_test)]

gbm = xgb.XGBRegressor()
tscv = TimeSeriesSplit(n_splits=2)
xgb_Gridcv = GridSearchCV(estimator=gbm, param_grid=gbm_param_grid, cv=tscv,refit = True, verbose=0)

xgb_Gridcv.fit(X_train, y_train,eval_metric=["rmse"],eval_set=eval_s)
        ypred = xgb_Gridcv.predict(X_test) 

Теперь, когда я запускаю results = gbm.evals_result(), я получаю эту ошибку

Traceback (most recent call last):
  File "/Users/prasadkamath/.conda/envs/Pk/lib/python3.5/site-packages/IPython/core/interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-11-95ef57081806>", line 1, in <module>
    results = gbm.evals_result()
  File "/Users/prasadkamath/.conda/envs/Pk/lib/python3.5/site-packages/xgboost/sklearn.py", line 401, in evals_result
    if self.evals_result_:
AttributeError: 'XGBRegressor' object has no attribute 'evals_result_'

1 Ответ

1 голос
/ 22 октября 2019

xgb_Gridcv будет объектом, содержащим вашу лучшую модель XGB, к которой можно получить доступ через xgb_Gridcv.best_estimator_, и теперь вы можете вызвать evals_result метод для него, чтобы получить evals_result, вам нужно использовать:

xgb_Gridcv.best_estimator_.evals_result()

Вместо

gbm.evals_result()

Надеюсь, это поможет!

...