Машина с усилением светового градиента (LightGBM) — это метод ансамбля, в котором используется алгоритм обучения на основе дерева. LightGBM выращивает деревья вертикально (по листам) по сравнению с другими алгоритмами обучения на основе деревьев, которые растут горизонтально (по уровням).

Быстрая иллюстрация, показывающая разницу между вертикальным и горизонтальным ростом дерева.

Использование древовидного алгоритма для выращивания дерева приведет к тому же конечному результату дерева. Разница здесь заключается в порядке построения дерева и останавливающих мерах, таких как количество создаваемых деревьев и методы обрезки, которые могут изменить окончательный результат дерева решений.

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

  • Задача: определяет задачу, которую необходимо выполнить, обучить модель LightGBM или выполнить прогнозирование на тестовом наборе.
  • приложение: тип проблемы, для которой вы хотите использовать модель. По умолчанию LightGBM рассматривает проблему с регрессионным типом. Для модели доступны следующие приложения: регрессия, бинарный, мультиклассовый, бустинг, gbdt (дерево решений с градиентным усилением), rf (случайный лес), dart (отсев соответствует нескольким аддитивным деревьям регрессии), goss (односторонняя выборка на основе градиента).
  • num_boost_round: количество итераций повышения, обычно 100 и выше.
  • learning_rate: влияние каждого дерева на конечный результат. Параметр обучения контролирует величину этого изменения в оценках.
  • num_leaves: количество листьев во всем дереве, по умолчанию LightGBM: 31.
  • устройство: по умолчанию: ЦП, ГП также можно выбрать.

Разобравшись с этим, давайте быстро взглянем на реализацию LightGBM в Python.

Для этого поста я буду использовать набор данных Employee Future Prediction от Kaggle. Не стесняйтесь исследовать и использовать свои наборы данных из таких источников, как Kaggle и т. д. Вы также можете ознакомиться с моим предыдущим постом о том, как загружать наборы данных Kaggle напрямую с помощью их API.



Загрузка набора данных

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

Цель состоит в том, чтобы выполнить бинарную классификацию с использованием модели LightGBM, чтобы предсказать, покинет ли сотрудник компанию или нет, на основе нескольких переменных.

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

df['LeaveOrNot'].value_counts()

Распределение целевой переменной показывает, что оно несбалансировано с целевым классом 0, что значительно выше, чем 1, с приблизительным соотношением 2:1. Я бы не стал делать какую-либо перебалансировку для этого примера, поэтому давайте определим функции и целевую переменную.

Определение функций и целевой переменной

X = df.drop(['LeaveOrNot'], axis=1)
y = df['LeaveOrNot']

Сплит для обучения и тестирования

Далее мы разделим набор данных на набор данных для обучения и тестирования. Поскольку у нас есть значительное количество записей, я буду использовать разделение обучения и тестирования 80/20.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 10)

Как только это будет сделано, мы можем приступить к реализации модели LightGBM.

Метрики обучения, тестирования и классификации модели LightGBM

Сначала мы установим пакет lightgbm через pip.

pip install lightgbm

Как только это будет сделано, мы можем импортировать пакет, построить модель и применить ее к нашему набору данных для тестирования.

import lightgbm as lgb
clf = lgb.LGBMClassifier()
clf.fit(X_train, y_train)
y_pred=clf.predict(X_test)

Мы также можем визуализировать точность модели.

from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y_pred, y_test)
print(‘LightGBM accuracy score: {0:0.4f}’.format(accuracy_score(y_test, y_pred)))

Чтобы проверить переоснащение, мы можем сравнить производительность модели на тренировочном наборе с фактической производительностью на тестовом наборе.

# Training set score
y_pred_train = clf.predict(X_train)
print('LightGBM Model training-set accuracy score: {0:0.4f}'. format(accuracy_score(y_train, y_pred_train)))
# Testing set score
accuracy=accuracy_score(y_pred, y_test)
print('LightGBM Model testing-set accuracy score: {0:0.4f}'.format(accuracy_score(y_test, y_pred)))

И результаты:

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

Мы также можем просмотреть матрицу путаницы, чтобы посмотреть на истинные положительные (TP), истинные отрицательные (TN), ложные положительные (FP) и ложные отрицательные (FN) результаты модели. Это полезные значения, помогающие в расчете специфичности и чувствительности.

import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10,8))
cm = confusion_matrix(y_test, y_pred)
cm_matrix = pd.DataFrame(data=cm, columns=['Actual Positive:1', 'Actual Negative:0'], 
                                 index=['Predict Positive:1', 'Predict Negative:0'])
sns.heatmap(cm_matrix, annot=True, fmt='d', cmap='Blues')
plt.title("Confusion Matrix\n")
plt.tight_layout()

Наконец, мы также можем посмотреть на показатели классификации модели LightGBM, которую мы только что построили.

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

Из метрик классификации видно, что базовая модель LightGBM, которую мы только что построили, имеет относительно высокую точность оценки, которая правильно классифицирует правильный класс.

Он также имеет относительно высокий показатель f1 при классификации сотрудников, которые вряд ли уйдут, и умеренно высокий показатель f1 при классификации сотрудников, которые могут покинуть компанию.

Для простоты показатели классификации из отчета о классификации можно интерпретировать следующим образом:

  • Отзыв: сколько целевых классов можно найти среди всех аналогичных целевых классов.
  • Точность. Количество правильно классифицированных классов среди этого конкретного класса.
  • F1-Score: отражает баланс между точностью и полнотой.
  • Поддержка: появление данного класса в наборе данных, помогающее определить баланс целевой переменной в наборе данных.

Это подводит итог основному использованию модели LightGBM, которую можно очень быстро реализовать для задач бинарной классификации. Далее давайте посмотрим, как настроить гиперпараметры, и сравним результаты!



Полную документацию также можно найти здесь: LightGBM.

Любознательный ученик? Раскройте весь потенциал своего обучения на носителе и поддержите таких писателей, как я, менее чем за чашку кофе.