12 Random Forests
Контекст
Одно решающее дерево интерпретируемо, но переобучается и нестабильно: чуть изменил данные — другое дерево. Брейман (2001) собирает из деревьев мощный устойчивый ансамбль.
Идея и механизм
Двойная случайность. Bagging: каждое дерево учится на bootstrap-выборке (случайная выборка с возвращением). Случайные признаки: на каждом сплите дерево выбирает лучший признак из случайного подмножества фичей. Это декоррелирует деревья — они не копируют друг друга. Предсказание — голосование (классификация) или усреднение (регрессия).
теория вероятностей Почему усреднение снижает дисперсию — и при чём тут декорреляция
Пусть есть B деревьев, у каждого дисперсия предсказания σ², а попарная корреляция между деревьями — ρ. Дисперсия их среднего:
Отсюда вся стратегия случайного леса:
- Больше деревьев (B → ∞) гасит второй член → дисперсия упирается в пол ρσ². Поэтому добавление деревьев не переобучает — лишь сходится к пределу.
- Чтобы опустить сам пол, надо уменьшить корреляцию ρ — это и делает случайный выбор признаков на сплитах. Bagging бьёт по (1−ρ)/B, случайные фичи — по ρ.
Вот почему «случайный» лес лучше простого бэггинга деревьев: декорреляция важнее, чем просто усреднение.
scikit-learn Случайный лес с OOB-оценкой
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=300, oob_score=True).fit(X, y)
print(rf.oob_score_) # оценка качества без отдельной валидации
print(rf.feature_importances_) # важность признаков почти бесплатно
Почему это важно
До сих пор дефолтный сильный бейзлайн для табличных данных (вместе с градиентным бустингом). Брейман доказал, что лес не переобучается с числом деревьев, и подарил два практичных бесплатных инструмента — OOB-оценку и важность признаков. Идеи bagging и декорреляции — общие для всех ансамблей.
Связи
Два столпа классического ML 2000-х: SVM (выпуклая оптимизация + ядра, силён в высокой размерности) и случайный лес (ансамбль деревьев, силён на разнородных табличных признаках). Оба — крепкие бейзлайны вне deep learning.
Лес не учит представление — он комбинирует решения по исходным признакам. На задачах, где признаки надо извлекать из сырых данных (пиксели, звук, текст), его побеждают глубокие сети. Но на структурированных табличных данных деревья-ансамбли до сих пор часто бьют нейросети.
И там, и там — «много специалистов вместо одного». Но лес усредняет все деревья (ансамбль), а MoE через gating активирует лишь немногих экспертов на каждый вход (условные вычисления). Разные ответы на вопрос «как объединять много моделей».
Вопросы пытливого ума
Если лес не переобучается от числа деревьев — можно ставить миллионы?
Качество перестанет расти задолго до этого: дисперсия упирается в пол ρσ², и лишние деревья лишь жгут вычисления. Важно: «не переобучается по числу деревьев» не значит «не переобучается вообще» — слишком глубокие деревья на маленьких данных всё равно подгонят шум. Регуляризуют глубиной и минимальным размером листа, а не числом деревьев.
Чем случайный лес отличается от градиентного бустинга — оба же ансамбли деревьев?
Лес строит деревья параллельно и независимо, борясь с дисперсией усреднением. Бустинг строит деревья последовательно, каждое исправляет ошибки предыдущих, борясь со смещением. Бустинг обычно точнее, но чувствительнее к настройке и переобучению; лес проще и устойчивее «из коробки».
Важности признаков «бесплатны» — можно ли им доверять?
С осторожностью. Стандартная важность по уменьшению impurity смещена в сторону признаков с многими уровнями (например, непрерывных или с высокой кардинальностью) и страдает при коррелированных признаках. Надёжнее permutation importance (на отложенных данных) или SHAP. «Бесплатно» ≠ «безусловно корректно».
Что читать в оригинале
Читать ключевое — bagging + случайные признаки, OOB и важность признаков; доказательство сходимости можно взять на уровне идеи (мат-блок выше).