Какие параметры в случайном лесу можно изменить и как влияют глубина и количество деревьев?
Что проверяют
Понимаете ли вы, почему лес работает: он усредняет много переобученных, но непохожих деревьев и так снижает дисперсию. Следом почти всегда спрашивают, может ли лес переобучиться от лишних деревьев, и как вы подбираете параметры.
Как отвечать
Опишите параметры группами на примере RandomForestClassifier из scikit-learn:
n_estimators: число деревьев, по умолчанию 100. Лишние деревья модель не переобучают: ошибка выходит на плато, а растут только время обучения, предсказания и объём памяти. Число выбирают по кривой ошибки на валидации или по OOB;max_depth: предельная глубина, по умолчаниюNone, деревья растут до чистых листьев. Глубокое дерево даёт низкое смещение и высокую дисперсию, а усреднение дисперсию гасит, поэтому в лесу глубину часто не ограничивают. Ограничение нужно на шумных данных и когда модель слишком тяжёлая;min_samples_leaf,min_samples_split,max_leaf_nodes: другие способы остановить рост,min_samples_leafобычно регуляризует мягче жёсткой глубины;max_features: сколько признаков рассматривается в каждом разбиении, у классификатора по умолчанию"sqrt". Главный рычаг разнообразия: меньше признаков, меньше корреляция деревьев, но слабее каждое дерево;bootstrap,max_samples,oob_score: выборка с возвращением и её размер. Сoob_score=Trueвы получаете оценку качества без отдельной валидации;class_weight: для несбалансированных классов, аn_jobs=-1распараллеливает обучение.
Подбор: RandomizedSearchCV или Optuna по max_features, min_samples_leaf и глубине с кросс-валидацией. n_estimators при этом не перебирают, а ставят побольше, насколько позволяет бюджет.
Где спотыкаются
Утверждают, что большое число деревьев ведёт к переобучению. Это верно для бустинга, где каждое новое дерево исправляет ошибки предыдущих, но не для бэггинга.
Переносят интуицию одиночного дерева на лес и первым делом режут max_depth до трёх-пяти. Лес из неглубоких деревьев недообучается.
Называют только глубину и число деревьев и забывают про max_features. Именно этот параметр отличает случайный лес от простого бэггинга деревьев.