Как работает регуляризация в деревьях решений
Что проверяют
Знаете ли вы, какими рычагами ограничивают сложность дерева и что в бустинге регуляризация устроена иначе, чем в одиночном дереве. Следом обычно спрашивают, как подбирать эти параметры и как понять, что дерево переобучилось.
Как отвечать
Дерево без ограничений дорастёт до чистых листьев и запомнит трейн: в DecisionTreeClassifier по умолчанию max_depth=None и min_samples_leaf=1. Рычаги делятся на три группы:
- предобрезка:
max_depth,min_samples_split,min_samples_leaf,max_leaf_nodes,min_impurity_decrease. Дерево не строит сплиты, которые не проходят порог; - постобрезка: в scikit-learn это cost-complexity pruning, минимизируется ошибка плюс α, умноженное на число листьев.
cost_complexity_pruning_pathдаёт набор значенийccp_alpha, лучшее выбирают кросс-валидацией; - регуляризация в бустинге: штрафуются веса листьев и сама структура. В XGBoost это
reg_lambda(L2 на веса листьев, по умолчанию 1),reg_alpha(L1),gamma(минимальный выигрыш для сплита),min_child_weight; в LightGBM главный рычагnum_leaves(по умолчанию 31) иmin_data_in_leaf; в CatBoostl2_leaf_reg. Сюда жеlearning_rate,subsampleиcolsample_bytree: они уменьшают вклад отдельного дерева и корреляцию между деревьями.
В случайном лесе деревья часто оставляют глубокими, а дисперсию гасят усреднение по бутстрэп-выборкам и случайный выбор признаков в сплите (max_features).
Переобучение видно по разрыву: на трейне метрика почти идеальна, на валидации заметно хуже, а кривая валидации по max_depth сначала растёт, потом падает.
Где спотыкаются
Говорят, что L1 и L2 к деревьям неприменимы. У одиночного дерева в scikit-learn таких параметров действительно нет, а в XGBoost и LightGBM это штатные настройки.
Подбирают глубину по тестовой выборке и докладывают это же число как итоговое качество.
Закручивают все ограничения сразу. Жёсткие max_depth и min_samples_leaf вместе дают недообученную модель, которая не ловит взаимодействия признаков.