0Pricing
Learn AI with Python · Урок

Градиентный бустинг: GBM и XGBoost

Бустинг и бэггинг, GradientBoostingClassifier, XGBClassifier и ранняя остановка.

«Градиентный бустинг: GBM и XGBoost» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Бустинг и бэггинг

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

Бустинг уменьшает смещение и часто обеспечивает более высокую точность, чем бэггинг, на структурированных данных.

Последовательные слабые модели

Градиентный бустинг создаёт ансамбль неглубоких деревьев (слабых моделей). Каждое дерево подгоняется под остатки (градиенты функции потерь), оставшиеся после работы текущего ансамбля.

Добавление множества небольших исправлений формирует сильную модель в целом.

GradientBoostingClassifier

Scikit-learn предоставляет GradientBoostingClassifier. Основные параметры: n_estimators (количество деревьев), learning_rate (коэффициент уменьшения шага) и max_depth (размер дерева).

from sklearn.ensemble import GradientBoostingClassifier

gbm = GradientBoostingClassifier(
    n_estimators=200,
    learning_rate=0.1,
    max_depth=3,
    random_state=0,
)
gbm.fit(Xtr, ytr)
print(gbm.score(Xte, yte))

Компромисс при выборе скорости обучения

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

Распространённая стратегия: задать низкую скорость обучения (например, 0.05) и большое количество оценщиков, а затем использовать раннюю остановку.

from sklearn.ensemble import GradientBoostingClassifier

gbm = GradientBoostingClassifier(
    n_estimators=1000,
    learning_rate=0.05,
    max_depth=3,
)

Почему max_depth обычно невелик

В бустинге каждое дерево является слабой моделью, поэтому значение max_depth обычно составляет от 3 до 6. Глубокие деревья быстро переобучаются на остатках. Ансамбль набирает силу благодаря множеству неглубоких деревьев, а не нескольким глубоким.

Знакомство с XGBoost

XGBoost — оптимизированная библиотека для градиентного бустинга: она работает быстрее, использует регуляризацию и умеет обрабатывать пропущенные значения. Она показывает одни из лучших результатов в соревнованиях по машинному обучению на табличных данных.

from xgboost import XGBClassifier

model = XGBClassifier(
    n_estimators=300,
    learning_rate=0.1,
    max_depth=4,
    random_state=0,
)
model.fit(Xtr, ytr)
print(model.score(Xte, yte))

Основные параметры XGBoost

Основные параметры соответствуют параметрам GBM:

  • n_estimators — количество раундов бустинга
  • learning_rate — уменьшение шага на каждом раунде
  • max_depth — глубина дерева
  • subsample и colsample_bytree добавляют случайность для регуляризации
from xgboost import XGBClassifier

model = XGBClassifier(
    n_estimators=500,
    learning_rate=0.05,
    max_depth=4,
    subsample=0.8,
    colsample_bytree=0.8,
)

Регуляризация в XGBoost

XGBoost добавляет штрафы L1 (reg_alpha) и L2 (reg_lambda), а также параметр gamma (минимальное уменьшение потерь для выполнения разбиения). Эти параметры ограничивают сложность модели и уменьшают переобучение сильнее, чем обычный GBM.

from xgboost import XGBClassifier

model = XGBClassifier(
    reg_alpha=0.1,
    reg_lambda=1.0,
    gamma=0.1,
)

Ранняя остановка

early_stopping_rounds останавливает обучение, когда метрика на проверочных данных перестаёт улучшаться в течение N раундов. Это позволяет автоматически найти подходящее количество деревьев и предотвратить переобучение.

from xgboost import XGBClassifier

model = XGBClassifier(
    n_estimators=2000,
    learning_rate=0.05,
    early_stopping_rounds=50,
    eval_metric="logloss",
)
model.fit(Xtr, ytr, eval_set=[(Xte, yte)], verbose=False)
print("Best iteration:", model.best_iteration)

Анализ важности признаков

XGBoost предоставляет feature_importances_, а более подробный метод get_booster().get_score() возвращает типы важности, такие как прирост и вес. Прирост показывает, насколько признак улучшил значение функции потерь.

model = XGBClassifier(n_estimators=200).fit(Xtr, ytr)
print(model.feature_importances_)

booster = model.get_booster()
print(booster.get_score(importance_type="gain"))

Когда стоит выбрать бустинг

При хорошей настройке градиентный бустинг часто превосходит случайные леса на табличных данных. Обратная сторона — большая чувствительность к гиперпараметрам и более медленное последовательное обучение. Начните со значений XGBoost по умолчанию, затем настройте learning_rate, max_depth и используйте раннюю остановку.

Быстрая проверка

Проверьте свои знания о бустинге.

Повторение

Повторение: Бустинг обучает деревья последовательно, каждое из которых исправляет предыдущие ошибки. Настройте n_estimators, learning_rate (низкая скорость и много деревьев) и небольшое значение max_depth. XGBoost добавляет регуляризацию (reg_alpha, reg_lambda, gamma) и early_stopping_rounds, чтобы автоматически выбрать оптимальное количество деревьев.

Часто задаваемые вопросы

Урок «Градиентный бустинг: GBM и XGBoost» бесплатный?

Да — полный текст урока «Градиентный бустинг: GBM и XGBoost» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Градиентный бустинг: GBM и XGBoost»?

Бустинг и бэггинг, GradientBoostingClassifier, XGBClassifier и ранняя остановка. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Градиентный бустинг: GBM и XGBoost»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Деревья решений: теория и реализация
  2. Случайные леса и бэггинг
  3. Градиентный бустинг: GBM и XGBoost
  4. LightGBM и CatBoost
← Назад к Learn AI with Python