Random Forest
Учимся объединять много деревьев в ансамбль — баггинг, случайные подпространства и почему это работает.
Идея: много деревьев лучше одного
Одно решающее дерево — нестабильное и склонно к переобучению. Но что, если обучить сотню деревьев и усреднить их ответы? Каждое дерево ошибается по-своему, но их коллективное решение оказывается намного точнее и стабильнее.
Это и есть Random Forest — ансамбль деревьев решений, который использует два источника случайности для «разнообразия» деревьев: bagging и random subspace.
Bagging: обучаем на подвыборках
Bagging (Bootstrap AGGregatING) — первый источник случайности:
- Из исходного датасета размером N делаем T случайных выборок (с возвращением) тоже размером N
- Каждая выборка немного отличается — в среднем содержит ~63% уникальных объектов
- На каждой выборке обучаем отдельное дерево
- Финальный ответ — голосование (классификация) или среднее (регрессия)
Почему 63%? Вероятность НЕ попасть в выборку для одного объекта = (1 − 1/N)^N ≈ 1/e ≈ 0.37. Значит, попадёт с вероятностью ≈ 0.63.
Random Subspace: случайные признаки
Второй источник случайности: при каждом разбиении узла дерево рассматривает не ВСЕ признаки, а случайное подмножество. Обычно:
- Для классификации: √m признаков (где m — общее число признаков)
- Для регрессии: m/3 признаков
- Это делает деревья ещё более разнообразными
Без этого трюка все деревья были бы похожи — они бы начинали с одного и того же «лучшего» признака. С random subspace разные деревья используют разные признаки → ошибки не коррелируют → ансамбль работает лучше.
Почему RF стабильнее одного дерева
Математически: дисперсия среднего N независимых случайных величин в N раз меньше дисперсии каждой. Чем менее коррелированы деревья — тем сильнее эффект усреднения.
- Bagging уменьшает дисперсию (variance) за счёт усреднения
- Random subspace уменьшает корреляцию между деревьями
- В итоге: RF почти не переобучается при добавлении деревьев (в отличие от бустинга)
- Одно дерево может сильно измениться от +1 объекта в данных. RF — почти нет
🎤 Random Forest — хороший baseline для почти любой задачи
Если вы не знаете, с чего начать — начните с RF. Он работает «из коробки», не требует нормализации, устойчив к выбросам, и почти всегда даёт приемлемый результат. Это не лучшая модель, но отличная стартовая точка.
Out-of-Bag Score
Помнишь, что каждое дерево обучается на ~63% данных? Оставшиеся ~37% не участвовали в обучении этого дерева. Их можно использовать как бесплатную валидацию!
- Для каждого объекта собираем предсказания только тех деревьев, которые НЕ видели этот объект при обучении
- Усредняем эти предсказания → получаем OOB-предсказание
- OOB Score ≈ качество на валидационной выборке, но без необходимости выделять отдельный val set
- В sklearn: `RandomForestClassifier(oob_score=True)`
Feature Importance
Random Forest умеет оценивать важность признаков — это одна из его суперсил.
MDI (Mean Decrease in Impurity)
Для каждого признака суммируем, насколько он уменьшил Gini/Entropy во всех узлах всех деревьев. Чем больше вклад — тем важнее признак. Быстро, но может переоценивать категориальные признаки с большим числом значений.
Permutation Importance
Берём обученную модель, перемешиваем значения одного признака случайным образом и смотрим, насколько упало качество. Если сильно упало — признак важный. Медленнее, но честнее.
Осторожно с важностью при коррелированных признаках
Если два признака сильно коррелируют — важность «размазывается» между ними. Каждый по отдельности кажется менее важным, чем есть на самом деле.
Ключевые гиперпараметры
- n_estimators — количество деревьев (100–500 обычно достаточно, больше = лучше, но медленнее)
- max_depth — глубина деревьев (None = без ограничений, но для RF это ок — bagging борется с переобучением)
- max_features — сколько признаков рассматривать при разбиении (√m для классификации)
- min_samples_leaf — минимум объектов в листе (чем больше — тем проще деревья)
- n_jobs=-1 — параллелизация! Деревья независимы → можно обучать на всех ядрах
Итого
- Random Forest = bagging + random subspace → ансамбль разнообразных деревьев
- Уменьшает дисперсию за счёт усреднения
- OOB Score — бесплатная оценка качества
- Feature Importance — понимаем, какие признаки важны
- Почти не переобучается при увеличении числа деревьев
- Идеальный baseline: работает из коробки, быстро, надёжно
Материалы
Подробное объяснение ансамблей и RF
Наглядное объяснение Random Forest от Josh Starmer
Документация sklearn по RandomForestClassifier/Regressor
Практические задания с RF на реальных данных