Лекция 11: Ансамбли I. Random Forest и Bagging
Цели лекции
- Понять идею Мудрости толпы (Wisdom of Crowds): почему 100 глупых деревьев лучше одного умного.
- Разобрать алгоритм Bagging (Bootstrap Aggregating).
- Изучить архитектуру Random Forest: как сделать деревья независимыми друг от друга.
- Освоить OOB Score (Out-of-Bag) и оценку важности признаков в ансамбле.
Часть 1: Проблема одиночного Дерева
На прошлой лекции мы выяснили, что Дерево Решений (Decision Tree) имеет свои плюсы и минусы:
- Плюсы: Интерпретируемо, ловит нелинейность.
- Минусы: Чудовищно нестабильно (High Variance). Если изменить 1% данных, структура дерева может измениться полностью. Оно легко переобучается.
Идея ансамблирования: Давайте обучим 100 разных деревьев. Каждое дерево будет совершать ошибки, но разные ошибки. Если мы усредним их ответы, случайные ошибки (шум) взаимоуничтожатся, а правильный сигнал усилится.
Аналогия: Кто хочет стать миллионером?
- Одиночное дерево — это “Звонок другу”. Друг может быть экспертом, а может быть пьян. Риск ошибки высок.
- Ансамбль — это “Помощь зала”. Если большинство людей в зале не сговаривались и хотя бы немного разбираются в теме, их коллективный ответ почти всегда верен (Теорема Кондорсе о жюри).
Часть 2: Bagging (Bootstrap Aggregating)
Чтобы ансамбль работал, модели должны быть разными (некоррелированными). Если мы обучим 100 деревьев на одних и тех же данных, мы получим 100 одинаковых клонов. Смысла усреднять клонов нет. Как сделать их разными? Дать им разные данные!
2.1. Бутстрэп (Bootstrap)
Это метод генерации выборок. У нас есть исходный мешок с данными ( строк). Мы создаем новый мешок такого же размера , вытаскивая строки из исходного случайным образом с возвращением (with replacement).
- Результат: В новую выборку некоторые строки попадут 2-3 раза, а некоторые (~37%) не попадут вообще.
- Bagging: Мы делаем так 100 раз -> получаем 100 чуть-чуть разных датасетов -> обучаем 100 деревьев.
Часть 3: Random Forest — Bagging на стероидах
Bagging помогает, но этого мало. Если в данных есть один супер-сильный признак (например, “Доход” для выдачи кредита), то все 100 деревьев поставят его в корень. Деревья снова станут похожими (скоррелированными).
3.1. Метод случайных подпространств
Random Forest добавляет хаос не только в строки (данные), но и в столбцы (признаки).
Золотое правило Леса
В каждом узле каждого дерева, когда алгоритм выбирает лучший вопрос для разбиения, он имеет право смотреть не на все признаки, а только на случайное подмножество признаков.
- Обычно берут .
- Пример: У нас 100 признаков. В конкретном узле дерево видит только 10 случайных. Возможно, “Доход” туда не попал, и дереву придется искать другие закономерности (например, “Возраст” + “Образование”).
- Это заставляет деревья быть максимально разнообразными.
3.2. Алгоритм Случайного Леса
- Создаем бутстрэп-выборок.
- На каждой строим дерево без ограничений (глубокое, переобученное).
- В каждом узле дерева выбираем случайные признаков.
- Predict:
- Для классификации: Голосование большинством (Majority Vote).
- Для регрессии: Среднее арифметическое ответов всех деревьев.
Часть 4: Out-of-Bag (OOB) Score — Бесплатная валидация
При бутстрэпе примерно 37% данных не попадают в обучение конкретного дерева. Эти данные называются Out-of-Bag.
- Для каждого дерева у нас есть свой “отложенный тест”.
- Мы можем прогнать эти “невиданные” строки через дерево и посчитать ошибку.
- Усреднив ошибку по всему лесу, мы получаем метрику качества (OOB Score), которая по надежности равна Cross-Validation, но считается быстрее.
Инженерный вывод
При обучении Random Forest можно не делать отдельный train_test_split, если данных очень мало, а доверять oob_score_. (Но на курсе мы по привычке будем делать Split).
Часть 5: Важность признаков (Feature Importance)
В одиночном дереве важность признака нестабильна. В Лесу мы усредняем снижение энтропии (Gini importance) по тысячам узлов. Это дает очень надежную оценку: “Какие факторы реально влияют на процесс?”.
Как использовать:
- Обучили Random Forest на всех признаках.
- Посмотрели
feature_importances_. - Выкинули признаки с весом 0.001 (шум).
- Обучили финальную модель на топ-признаках (она будет работать быстрее).