Требуется руководство — GridSearchCV возвращает параметры, которые снижают точность модели XGBoost

#machine-learning #classification #xgboost #gridsearchcv

#машинное обучение #классификация #xgboost #gridsearchcv

Вопрос:

Я играю с XGBoostClassifier и настраиваю его с помощью GridSearchCV. Сначала я создал переменную xgbc:

 xgbc = xgb.XGBClassifier()
 

Я не использовал никаких параметров, так как хотел увидеть производительность модели по умолчанию. Это дало мне accuracy_score = 85,65%, recall_score = 77,91% и roc_auc_score = 84,21%, используя следующие строки кода:

 print("Accuracy: ", accuracy_score(y_test, xgbc.predict(X_test)))
print("Recall: ", recall_score(y_test, xgbc.predict(X_test)))
print("ROC_AUC: ", roc_auc_score(y_test, xgbc.predict(X_test)))
 

Затем я использовал GridSearchCV, чтобы попытаться настроить параметры, например:

Настройка словаря параметров:

 xgbc_params = {'max_depth': [5, 6, 7], #6
               'learning_rate': [0.25, 0.300000012, 0.35], #0.300000012
               'gamma':[0, 0.001, 0.1], #0
               'reg_lambda': [0.8, 0.95, 1], #1
               'scale_pos_weight': [0, 1, 2], #1
               'n_estimators': [95, 100, 105]} #100
 

(Цифры после # — это значения по умолчанию, которые дали мне вышеуказанные оценки.)

И теперь запустите GridSearchCV следующим образом:

 xgbc_grid = GridSearchCV(xgbc, param_grid=xgbc_params, scoring = make_scorer(accuracy_score), cv = 10, n_jobs = -1)
 

Затем сопоставьте это с данными обучения:

 xgbc_grid.fit(X_train, y_train, verbose = 1, early_stopping_rounds = 10, eval_metric = 'aucpr', eval_set = [(X_test, y_test)])
 

Наконец, снова запустите метрики:

 print("Best Reg estimators: ", xgbc_grid.best_params_)
print("Accuracy: ", accuracy_score(y_test, xgbc_grid.predict(X_test)))
print("Recall: ", recall_score(y_test, xgbc_grid.predict(X_test)))
print("ROC_AUC: ", roc_auc_score(y_test, xgbc_grid.predict(X_test)))
 

Теперь оценки меняются: accuracy_score = 0,8340807174887892, recall_score = 0,7325581395348837 и roc_auc_score = 0,8420896282464777. Кроме того, вот best_params_ результат:

 Best Reg estimators:  {'gamma': 0, 'learning_rate': 0.35, 'max_depth': 5, 'n_estimators': 95, 'reg_lambda': 0.8, 'scale_pos_weight': 1}
 

Вот моя проблема:

  1. Значения параметров, которые возвращает xgbc_grid.best_params_ GridSearchCV, не являются наиболее оптимальными с точки зрения точности, поскольку показатель точности снижается. Не могли бы вы помочь мне понять, почему это происходит?
  2. В приведенном выше словаре параметров я указал значения по умолчанию. Если я установлю для параметров только эти отдельные значения, то я получу точность 85%, например, 'max_depth': [6] . Однако, как только я добавляю другие значения, например 'max_depth': [5, 6, 7] , тогда GridSearchCV выдает параметры, которые не являются самыми высокими по точности. Полная информация ниже:
      Base Reg estimators (acc = 85%):  {'gamma': 0, 'learning_rate': 0.35, 'max_depth': 5, 'n_estimators': 95, 'reg_lambda': 0.8, 'scale_pos_weight': 1}
    
     Best Reg estimators (acc = 83%):  {'gamma': 0, 'learning_rate': 0.35, 'max_depth': 6, 'n_estimators': 100, 'reg_lambda': 1, 'scale_pos_weight': 1}
     

Комментарии:

1. Любая процедура CV по определению вносит некоторую случайность в проблему, что может легко привести к расхождениям, подобным тем, о которых вы сообщаете здесь .