LightGBM – быстрый градиентный бустинг

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в LightGBM

LightGBM (Light Gradient Boosting Machine) — это фреймворк градиентного бустинга от Microsoft, оптимизированный для высокой скорости и эффективности при работе с большими объемами данных. Он обеспечивает более быструю и точную работу по сравнению с классическими реализациями градиентного бустинга за счет инновационных подходов, таких как GOSS (Gradient-based One-Side Sampling) и EFB (Exclusive Feature Bundling).

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


Отличие LightGBM от XGBoost

Критерий LightGBM XGBoost
Скорость обучения Быстрее Медленнее при больших данных
Память Использует меньше памяти Более ресурсоемкий
Поддержка категориальных Встроенная Требуется кодирование
Обработка разреженности Поддерживается Поддерживается
Алгоритм разбиения дерева Leaf-wise Level-wise

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

  • Высокая скорость обучения и предсказания

  • Поддержка большого объема данных

  • Встроенная работа с категориальными признаками

  • Поддержка параллельных и распределенных вычислений

  • Возможность настройки практически всех аспектов модели

  • Хорошая масштабируемость при работе на GPU и кластерах


Архитектура алгоритма и подход GOSS

LightGBM использует leaf-wise стратегию построения деревьев вместо традиционной level-wise, что позволяет достигать лучшего качества модели. Однако такой подход может вызывать переобучение, особенно при малом объеме данных.

Дополнительно используется:

  • GOSS (Gradient-based One-Side Sampling) — выбор только наиболее "информативных" точек с большими остатками.

  • EFB (Exclusive Feature Bundling) — объединение редко активных признаков для уменьшения размерности.


Установка и подключение LightGBM

Установка через pip:

bash
pip install lightgbm

Импорт модуля:

python
import lightgbm as lgb

Для GPU: требуется отдельная сборка с поддержкой CUDA.


Подготовка данных и важные требования

LightGBM требует:

  • Признаки не должны содержать NaN (если не обрабатываются явно).

  • Категориальные признаки можно передавать напрямую, если они имеют тип category в Pandas.

  • Матрицы признаков можно подавать как NumPy-массив или pandas.DataFrame.


Обучение модели классификации

python
from lightgbm import LGBMClassifier from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X, y = load_breast_cancer(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = LGBMClassifier() model.fit(X_train, y_train) y_pred = model.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred))

Настройка гиперпараметров

Ключевые параметры для классификации и регрессии

  • boosting_type: тип бустинга (gbdt, dart, goss)

  • objective: тип задачи (binary, multiclass, regression)

  • metric: метрика качества (binary_logloss, auc, l2)

  • num_leaves: максимальное количество листьев в дереве

  • learning_rate: шаг обучения

  • n_estimators: число деревьев

Параметры регуляризации и борьбы с переобучением

  • max_depth: максимальная глубина дерева

  • min_child_samples: минимальное количество объектов в листе

  • subsample: доля данных для дерева

  • colsample_bytree: доля признаков при построении

  • lambda_l1, lambda_l2: коэффициенты L1 и L2 регуляризации


Поддержка категориальных признаков в LightGBM

LightGBM автоматически обрабатывает категориальные признаки, если они представлены как тип category:

python
df['category_feature'] = df['category_feature'].astype('category')

Это позволяет избежать использования OneHotEncoder, что экономит память и ускоряет обучение.


Визуализация важности признаков

python
import matplotlib.pyplot as plt lgb.plot_importance(model, max_num_features=10) plt.show()

Отображается относительная важность признаков на основании их вклада в разбиения деревьев.


Кросс-валидация и ранняя остановка

python
from lightgbm import Dataset, cv train_data = Dataset(X_train, label=y_train) params = { 'objective': 'binary', 'metric': 'auc' } cv_results = cv(params, train_data, num_boost_round=1000, nfold=5, early_stopping_rounds=10)

Сохранение и загрузка моделей

python
model.booster_.save_model("lightgbm_model.txt") from lightgbm import Booster loaded_model = Booster(model_file="lightgbm_model.txt")

Использование с Pandas и Scikit-learn

LightGBM поддерживает интерфейс Scikit-learn через LGBMClassifier и LGBMRegressor, что позволяет:

  • Использовать GridSearchCV, RandomizedSearchCV

  • Встраивать в pipeline

  • Применять совместно с ColumnTransformer, StandardScaler и другими компонентами


Примеры реального применения LightGBM

  • Прогнозирование конверсии и поведения пользователей в e-commerce

  • Модели кредитного скоринга в банках

  • Предсказание медицинских диагнозов

  • Обнаружение мошенничества в онлайн-транзакциях

  • Оптимизация ставок в рекламных кампаниях


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

Что такое LightGBM?

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

Поддерживает ли LightGBM категориальные признаки?

Да, без необходимости предварительного кодирования.

Когда лучше использовать LightGBM, а не XGBoost?

Когда нужно обрабатывать большие объемы данных или важна скорость обучения.

Есть ли поддержка GPU?

Да, при сборке с CUDA и установке соответствующих библиотек.

Что такое GOSS и EFB?

Это методы ускорения обучения: GOSS — выборка по градиенту, EFB — слияние редких признаков.

Полный справочник по ключевым функциям и методам библиотеки LightGBM для Python

Установка

bash
pip install lightgbm

Основные интерфейсы

Подход Описание
LightGBM API (lgb.train, lgb.Dataset) Нативный API, даёт больше контроля и гибкости.
scikit-learn API (LGBMClassifier, LGBMRegressor) Удобный и совместимый с scikit-learn пайплайнами.

1. Интерфейс scikit-learn (LGBMClassifier, LGBMRegressor)

Класс Описание
LGBMClassifier() Классификатор с интерфейсом sklearn.
LGBMRegressor() Регрессор с интерфейсом sklearn.
model.fit(X, y) Обучение модели.
model.predict(X) Предсказание меток.
model.predict_proba(X) Вероятности классов.
model.score(X, y) Оценка точности.
model.feature_importances_ Важность признаков.
model.booster_ Доступ к нативной модели lgb.Booster.

Пример:

python
from lightgbm import LGBMClassifier model = LGBMClassifier(n_estimators=100, learning_rate=0.1) model.fit(X_train, y_train) y_pred = model.predict(X_test)

2. Нативный LightGBM API (lgb.train, lgb.Dataset)

Подготовка данных

Функция / Класс Описание
lgb.Dataset(data, label=...) Основной формат входных данных.
dataset.construct() Явное построение набора данных.
dataset.save_binary() Сохранение данных в бинарном формате.

Обучение модели

Функция Описание
lgb.train(params, train_data) Обучение модели через нативный API.
params Словарь с параметрами модели (см. ниже).
valid_sets=[train_data, valid_data] Передача валидационного набора.
early_stopping_rounds Остановка при отсутствии улучшений.
verbose_eval Печать логов обучения.

Предсказание и сохранение

Метод Описание
booster.predict(X) Предсказание с помощью обученной модели.
booster.save_model(filename) Сохранение модели.
lgb.Booster(model_file=...) Загрузка сохранённой модели.
booster.feature_importance() Возвращает важность признаков.

Пример:

python
import lightgbm as lgb train_data = lgb.Dataset(X_train, label=y_train) valid_data = lgb.Dataset(X_val, label=y_val) params = { 'objective': 'binary', 'metric': 'binary_logloss', 'learning_rate': 0.1, 'num_leaves': 31 } model = lgb.train(params, train_data, num_boost_round=100, valid_sets=[valid_data], early_stopping_rounds=10)

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

Параметр Описание
objective Целевая задача: 'regression', 'binary', 'multiclass'.
metric Метрика: 'rmse', 'logloss', 'auc' и др.
learning_rate Шаг обучения (обычно 0.01–0.1).
num_leaves Количество листьев в дереве (чем больше, тем сложнее модель).
max_depth Максимальная глубина дерева.
min_data_in_leaf Минимальное количество объектов в листе.
feature_fraction Доля признаков, используемых в каждом дереве.
bagging_fraction Доля обучающих примеров, используемых в каждой итерации.
bagging_freq Частота применения bagging.
lambda_l1 / lambda_l2 L1 / L2-регуляризация.
verbosity Уровень вывода логов.
boosting_type Тип бустинга: 'gbdt', 'dart', 'goss'.

Метрики

Метрика Описание
binary_logloss Логарифмическая потеря (бинарная классификация).
auc Площадь под ROC-кривой.
rmse Среднеквадратичная ошибка (регрессия).
multi_logloss Потеря для многоклассовой задачи.
error Доля ошибок классификации.

Обработка категориальных признаков

Подход Описание
categorical_feature=[col_indices] Указываются при создании Dataset.
pd.Categorical или astype('category') Для автоматического распознавания категорий.

Важность признаков

Метод Описание
booster.feature_importance(importance_type='split') Кол-во использований признака.
importance_type='gain' Суммарное улучшение по признаку.
lgb.plot_importance(model) Визуализация важности.

Полный пример на sklearn-совместимом API

python
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from lightgbm import LGBMClassifier from sklearn.metrics import accuracy_score X, y = load_breast_cancer(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = LGBMClassifier(n_estimators=100, learning_rate=0.05) model.fit(X_train, y_train) y_pred = model.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred))

Заключение: когда и почему стоит выбрать LightGBM

LightGBM — это один из самых быстрых и эффективных алгоритмов градиентного бустинга. Он особенно полезен при работе с большими объемами данных, высокой размерностью признаков и необходимостью быстрой итерации. Встроенная поддержка категориальных переменных, параллельная обработка, GPU-ускорение и масштабируемость делают LightGBM отличным выбором для задач реального машинного обучения и аналитики.