Ранний отказ от Пикарета? Переоснащение с помощью Catboost и XGBoost
Я сравниваю производительность Catboost, XGBoost и LinearRegression в Pycaret. Catboost и XGBoost не настроены.
Пока я вижу, что Catboost и XGBoost переоснащаются.
Для линейной регрессии поезд / тестовый результат - поезд R2: 0,72, тест R2: 0,65
Есть ли способ установить "Раннюю остановку" для XGBoost и Catboost, чтобы избежать этого переоборудования? Или есть другие параметры, которые нужно настроить в Pycaret, чтобы избежать переобучения?
2 ответа
Существует больше возможностей, как избежать переобучения.
- Выбор функции (не может быть настроен в настройке) - есть два типа и переменный порог ИЛИ RFE (рекурсивное исключение функции) или SHAP
- настроить оба - Catboost, XGBoost (или другие древовидные алгоритмы)
- увеличьте n_estimators=100 или 500, или 1000
- запустить алгоритмы несколько раз
- изменить выборку 80/20, 70/30 и т. д.
- удалить коррелированные входные данные
Во-первых, как вы сравниваете модели без настройки гиперпараметров? Было бы полезно увидеть ваш код.
В pycaret есть параметр ранней остановки, но я не уверен, что он делает. Это также доступно только для
tune_model
функция. Если вы разрешите pycaret автоматически искать гиперпараметры для xgboost и catboost, они больше не должны соответствовать. Это связано с тем, что они будут настраивать гиперпараметр регуляризации (регуляризации L1 и / или L2 на весах листьев) и будут сравнивать оценки по наборам проверки.
С помощью catboost (или xgboost или lightgbm) вы можете установить параметр для включения ранней остановки:
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, которые вы, вероятно, используете.