#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, которые вы, вероятно, используете.