machine-learning Лекция

Ансамбли I. Random Forest и Bagging

Лекция 11: Ансамбли I. Random Forest и Bagging

Цели лекции

  1. Понять идею Мудрости толпы (Wisdom of Crowds): почему 100 глупых деревьев лучше одного умного.
  2. Разобрать алгоритм Bagging (Bootstrap Aggregating).
  3. Изучить архитектуру Random Forest: как сделать деревья независимыми друг от друга.
  4. Освоить OOB Score (Out-of-Bag) и оценку важности признаков в ансамбле.

Часть 1: Проблема одиночного Дерева

На прошлой лекции мы выяснили, что Дерево Решений (Decision Tree) имеет свои плюсы и минусы:

  • Плюсы: Интерпретируемо, ловит нелинейность.
  • Минусы: Чудовищно нестабильно (High Variance). Если изменить 1% данных, структура дерева может измениться полностью. Оно легко переобучается.

Идея ансамблирования: Давайте обучим 100 разных деревьев. Каждое дерево будет совершать ошибки, но разные ошибки. Если мы усредним их ответы, случайные ошибки (шум) взаимоуничтожатся, а правильный сигнал усилится.

Аналогия: Кто хочет стать миллионером?

  • Одиночное дерево — это “Звонок другу”. Друг может быть экспертом, а может быть пьян. Риск ошибки высок.
  • Ансамбль — это “Помощь зала”. Если большинство людей в зале не сговаривались и хотя бы немного разбираются в теме, их коллективный ответ почти всегда верен (Теорема Кондорсе о жюри).

Часть 2: Bagging (Bootstrap Aggregating)

Чтобы ансамбль работал, модели должны быть разными (некоррелированными). Если мы обучим 100 деревьев на одних и тех же данных, мы получим 100 одинаковых клонов. Смысла усреднять клонов нет. Как сделать их разными? Дать им разные данные!

2.1. Бутстрэп (Bootstrap)

Это метод генерации выборок. У нас есть исходный мешок с данными (NN строк). Мы создаем новый мешок такого же размера NN, вытаскивая строки из исходного случайным образом с возвращением (with replacement).

  • Результат: В новую выборку некоторые строки попадут 2-3 раза, а некоторые (~37%) не попадут вообще.
  • Bagging: Мы делаем так 100 раз -> получаем 100 чуть-чуть разных датасетов -> обучаем 100 деревьев.

Часть 3: Random Forest — Bagging на стероидах

Bagging помогает, но этого мало. Если в данных есть один супер-сильный признак (например, “Доход” для выдачи кредита), то все 100 деревьев поставят его в корень. Деревья снова станут похожими (скоррелированными).

3.1. Метод случайных подпространств

Random Forest добавляет хаос не только в строки (данные), но и в столбцы (признаки).

Золотое правило Леса

В каждом узле каждого дерева, когда алгоритм выбирает лучший вопрос для разбиения, он имеет право смотреть не на все признаки, а только на случайное подмножество признаков.

  • Обычно берут features\sqrt{features}.
  • Пример: У нас 100 признаков. В конкретном узле дерево видит только 10 случайных. Возможно, “Доход” туда не попал, и дереву придется искать другие закономерности (например, “Возраст” + “Образование”).
  • Это заставляет деревья быть максимально разнообразными.

3.2. Алгоритм Случайного Леса

  1. Создаем NN бутстрэп-выборок.
  2. На каждой строим дерево без ограничений (глубокое, переобученное).
  3. В каждом узле дерева выбираем случайные KK признаков.
  4. 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) по тысячам узлов. Это дает очень надежную оценку: “Какие факторы реально влияют на процесс?”.

Как использовать:

  1. Обучили Random Forest на всех признаках.
  2. Посмотрели feature_importances_.
  3. Выкинули признаки с весом 0.001 (шум).
  4. Обучили финальную модель на топ-признаках (она будет работать быстрее).

🧠 Проверка знаний

За счет чего деревья в алгоритме Random Forest получаются максимально разнообразными (некоррелированными)?

Какое практическое преимущество дает использование OOB (Out-of-Bag) Score при обучении Random Forest?