Деревья решений и ансамбли¶
Обзор¶
Деревья решений — это алгоритмы, которые строят модель в виде древовидной структуры для принятия решений на основе признаков данных.
Деревья решений¶
Принцип работы¶
Дерево рекурсивно разделяет данные по признакам, максимизируя "чистоту" узлов.
Критерии разделения¶
- Для классификации:
- Entropy (Информационный выигрыш)
- Gini Impurity
- Для регрессии:
- MSE (Mean Squared Error)
- MAE (Mean Absolute Error)
Алгоритм построения¶
- Выбрать лучший признак для разделения
- Разделить данные на подмножества
- Рекурсивно повторять для каждого подмножества
- Остановиться при выполнении критериев остановки
Критерии остановки¶
- Максимальная глубина
- Минимальное количество_samples в узле
- Минимальное улучшение функции потерь
Преимущества и недостатки¶
| Преимущества | Недостатки |
|---|---|
| Интерпретируемость | Склонность к переобучению |
| Не требуют масштабирования | Нестабильность к шуму |
| Работают с категориальными данными | Предпочтение признакам с большим количеством значений |
| Визуализация | Плохая экстраполяция |
Случайный лес (Random Forest)¶
Принцип работы¶
Ансамбль из множества деревьев, обученных на: - Бутстрэп выборках (bagging) - Случайных подмножествах признаков
Как работает¶
Результат = Мода(предсказания всех деревьев) # для классификации
Результат = Среднее(предсказания всех деревьев) # для регрессии
Гиперпараметры¶
n_estimators: количество деревьевmax_depth: максимальная глубинаmax_features: количество признаков для рассмотренияmin_samples_split: минимальное количество образцов для разделенияmin_samples_leaf: минимальное количество образцов в листе
Преимущества¶
- Уменьшает переобучение
- Высокая точность
- Оценка важности признаков
- Работает с пропусками
Градиентный бустинг (Gradient Boosting)¶
Принцип работы¶
Последовательное обучение деревьев, где каждое новое дерево исправляет ошибки предыдущих.
Алгоритм¶
- Обучить первое дерево на исходных данных
- Вычислить ошибки (остатки)
- Обучить следующее дерево на остатках
- Повторять N раз
- Объединить предсказания с весами
Популярные реализации¶
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_
Практические советы¶
- Начните с Random Forest как базового метода
- Используйте GridSearchCV для подбора гиперпараметров
- Градиентный бустинг дает лучшую точность, но требует тонкой настройки
- CatBoost лучше всего работает с категориальными признаками
- Early stopping помогает избежать переобучения в бустинге