#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}
Вот моя проблема:
- Значения параметров, которые возвращает
xgbc_grid.best_params_
GridSearchCV, не являются наиболее оптимальными с точки зрения точности, поскольку показатель точности снижается. Не могли бы вы помочь мне понять, почему это происходит? - В приведенном выше словаре параметров я указал значения по умолчанию. Если я установлю для параметров только эти отдельные значения, то я получу точность 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 по определению вносит некоторую случайность в проблему, что может легко привести к расхождениям, подобным тем, о которых вы сообщаете здесь .