Перейти к содержанию

Деревья решений и ансамбли

Обзор

Деревья решений — это алгоритмы, которые строят модель в виде древовидной структуры для принятия решений на основе признаков данных.

Деревья решений

Принцип работы

Дерево рекурсивно разделяет данные по признакам, максимизируя "чистоту" узлов.

Критерии разделения

  • Для классификации:
  • Entropy (Информационный выигрыш)
  • Gini Impurity
  • Для регрессии:
  • MSE (Mean Squared Error)
  • MAE (Mean Absolute Error)

Алгоритм построения

  1. Выбрать лучший признак для разделения
  2. Разделить данные на подмножества
  3. Рекурсивно повторять для каждого подмножества
  4. Остановиться при выполнении критериев остановки

Критерии остановки

  • Максимальная глубина
  • Минимальное количество_samples в узле
  • Минимальное улучшение функции потерь

Преимущества и недостатки

Преимущества Недостатки
Интерпретируемость Склонность к переобучению
Не требуют масштабирования Нестабильность к шуму
Работают с категориальными данными Предпочтение признакам с большим количеством значений
Визуализация Плохая экстраполяция

Случайный лес (Random Forest)

Принцип работы

Ансамбль из множества деревьев, обученных на: - Бутстрэп выборках (bagging) - Случайных подмножествах признаков

Как работает

Результат = Мода(предсказания всех деревьев)  # для классификации
Результат = Среднее(предсказания всех деревьев)  # для регрессии

Гиперпараметры

  • n_estimators: количество деревьев
  • max_depth: максимальная глубина
  • max_features: количество признаков для рассмотрения
  • min_samples_split: минимальное количество образцов для разделения
  • min_samples_leaf: минимальное количество образцов в листе

Преимущества

  • Уменьшает переобучение
  • Высокая точность
  • Оценка важности признаков
  • Работает с пропусками

Градиентный бустинг (Gradient Boosting)

Принцип работы

Последовательное обучение деревьев, где каждое новое дерево исправляет ошибки предыдущих.

Алгоритм

  1. Обучить первое дерево на исходных данных
  2. Вычислить ошибки (остатки)
  3. Обучить следующее дерево на остатках
  4. Повторять N раз
  5. Объединить предсказания с весами

Популярные реализации

XGBoost

  • Регуляризация L1/L2
  • Параллелизация
  • Работа с пропусками
  • Early stopping

LightGBM

  • Градиентная однобоковая выборка (GOSS)
  • Эксклюзивное связывание признаков (EFB)
  • Быстрее XGBoost на больших данных

CatBoost

  • Обработка категориальных признаков
  • Упорядоченный бустинг
  • Симметричные деревья

Гиперпараметры градиентного бустинга

  • learning_rate: темп обучения (0.01-0.3)
  • n_estimators: количество деревьев
  • max_depth: глубина деревьев (3-8)
  • subsample: доля выборки для каждого дерева
  • colsample_bytree: доля признаков

Сравнение методов

Метод Точность Скорость обучения Интерпретируемость Переобучение
Дерево решений Низкая Очень быстро Отличная Высокое
Random Forest Высокая Быстро Средняя Низкое
Gradient Boosting Очень высокая Медленно Низкая Среднее

Пример кода

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier

# Дерево решений
dt = DecisionTreeClassifier(max_depth=5, criterion='gini')
dt.fit(X_train, y_train)

# Случайный лес
rf = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
rf.fit(X_train, y_train)

# Градиентный бустинг
gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
gb.fit(X_train, y_train)

# XGBoost
xgb = XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=5)
xgb.fit(X_train, y_train)

# LightGBM
lgbm = LGBMClassifier(n_estimators=100, learning_rate=0.1, max_depth=-1)
lgbm.fit(X_train, y_train)

# Важность признаков
importances = rf.feature_importances_

Практические советы

  1. Начните с Random Forest как базового метода
  2. Используйте GridSearchCV для подбора гиперпараметров
  3. Градиентный бустинг дает лучшую точность, но требует тонкой настройки
  4. CatBoost лучше всего работает с категориальными признаками
  5. Early stopping помогает избежать переобучения в бустинге

См. также