Ранняя остановка с помощью Pycaret? Переобучение с помощью Catboost и XGBoost

#python #model #evaluation #pycaret

#python #Модель #оценка #pycaret

Вопрос:

Я сравниваю производительность Catboost, XGBoost и LinearRegression в Pycaret. Catboost и XGBoost не настроены.

Пока я вижу, что Catboost и XGBoost переобучаются.

введите описание изображения здесь

Для линейной регрессии train / test-оценка составляет train R2: 0,72, test R2: 0,65

Есть ли способ установить «раннюю остановку» для XGBoost и Catboost, чтобы избежать этого переобучения? Или есть другие параметры для настройки в Pycaret, чтобы избежать переобучения?

Ответ №1:

Существует больше возможностей, как избежать переобучения.

  • Выбор функции (не может быть настроен в настройках) — существует два типа и переменный порог ИЛИ RFE (рекурсивное устранение функций) или SHAP
  • настройте оба — Catboost, XGBoost (или другие древовидные алгоритмы)
  • увеличьте n_estimators=100 или 500, или 1000
  • запустите алгоритмы несколько раз
  • измените выборку 80/20, 70/30 и т. Д.
  • удалить коррелированные входные данные

Ответ №2:

Во-первых, как вы сравниваете модели без настройки гиперпараметров? Просмотр вашего кода был бы полезен.

В pycaret есть параметр ранней остановки, но я не уверен, что он делает. Это также доступно только для tune_model функции. Если вы разрешите pycaret автоматический поиск гиперпараметров для xgboost и catboost, они больше не должны переобучаться. Это потому, что они будут настраивать гиперпараметр регуляризации (регуляризации L1 и / или L2 для конечных весов) и будут сравнивать оценки по наборам проверки.

С помощью catboost (или xgboost или lightgbm) вы можете установить early_stopping_rounds параметр для включения ранней остановки:

 import catboost

cb = catboost.CatBoostClassifier(n_estimators=1000)
cb.fit(x_train, y_train, eval_set=(x_test, y_test), early_stopping_rounds=10, plot=True)
 

Вы должны предоставить eval_set его, в противном случае ему будет нечего оценивать для ранней остановки. Я не думаю, что на данный момент возможно добавить early_stopping_rounds в качестве параметра какую-либо из соответствующих функций pycaret, которые вы, вероятно, используете.