Что такое легкий ГБМ?

Light GBM — это платформа повышения градиента, в которой используется алгоритм обучения на основе дерева.

Чем он отличается от других древовидных алгоритмов?

Light GBM увеличивает дерево по вертикали, в то время как другой алгоритм выращивает деревья по горизонтали, что означает, что Light GBM увеличивает дерево по листьям, в то время как другой алгоритм увеличивает по уровням. Он выберет лист с максимальными дельта-потерями для роста. При выращивании одного и того же листа алгоритм Leaf-wise может уменьшить больше потерь, чем алгоритм level-wise.

На диаграммах ниже поясняется реализация LightGBM и других алгоритмов бустинга.

Почему Light GBM набирает огромную популярность?

Размер данных увеличивается день ото дня, и традиционным алгоритмам обработки данных становится все труднее давать более быстрые результаты. Легкий GBM имеет префикс «Легкий» из-за его высокой скорости. Light GBM может обрабатывать большие объемы данных и требует меньше памяти для работы. Другая причина популярности Light GBM заключается в том, что он ориентируется на точность результатов. LGBM также поддерживает обучение на GPU, поэтому специалисты по данным широко используют LGBM для разработки приложений для обработки данных.

Нет, не рекомендуется использовать LGBM для небольших наборов данных. Легкий GBM чувствителен к переоснащению и может легко переоснащать небольшие данные. Порога количества строк нет, но мой опыт подсказывает, что использовать его можно только для данных с более чем 10 000 строк.

Мы вкратце обсудили концепцию Light GBM, теперь что насчет ее реализации?

Внедрить Light GBM несложно, сложность заключается только в настройке параметров. Light GBM охватывает более 100 параметров, но не беспокойтесь, вам не нужно учить все.

Реализатору очень важно знать хотя бы некоторые основные параметры Light GBM. Если вы внимательно изучите следующие параметры LGBM, держу пари, вы найдете этот мощный алгоритм простым делом.

Приступим к обсуждению параметров.

Параметры

Параметры управления

max_depth: описывает максимальную глубину дерева. Этот параметр используется для обработки переобучения модели. Каждый раз, когда вы чувствуете, что ваша модель переобучена, мой первый совет будет заключаться в том, чтобы уменьшить max_depth.

min_data_in_leaf: это минимальное количество записей, которое может иметь лист. Значение по умолчанию — 20, оптимальное значение. Он также используется для борьбы с подгонкой

feature_fraction: используется, когда ваш бустинг (обсуждается позже) представляет собой случайный лес. Доля функций 0,8 означает, что LightGBM будет случайным образом выбирать 80% параметров на каждой итерации для построения деревьев.

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

early_stopping_round: этот параметр может помочь вам ускорить анализ. Модель прекратит обучение, если одна метрика одних проверочных данных не улучшится в последних раундах Early_stopping_round. Это уменьшит количество чрезмерных итераций.

лямбда:лямбда определяет регуляризацию. Типичное значение находится в диапазоне от 0 до 1.

min_gain_to_split: этот параметр описывает минимальный выигрыш для разделения. Его можно использовать для управления рядом полезных разбиений в дереве.

max_cat_group:когда количество категорий велико, поиск точки разделения в ней легко переобучается. Итак, LightGBM объединяет их в группы «max_cat_group» и находит точки разделения на границах групп, по умолчанию: 64.

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

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

application: это самый важный параметр, определяющий применение вашей модели, будь то проблема регрессии или задача классификации. LightGBM по умолчанию будет рассматривать модель как модель регрессии.

  • регрессия: для регрессии
  • двоичный: для двоичной классификации
  • мультикласс: для проблемы классификации мультикласса

Boosting: определяет тип алгоритма, который вы хотите запустить, по умолчанию = gdbt.

  • gbdt: традиционное дерево решений для повышения градиента
  • рф: случайный лес
  • dart: Dropouts соответствуют деревьям множественной аддитивной регрессии
  • goss: односторонняя выборка на основе градиента

num_boost_round: количество итераций повышения, обычно более 100.

learning_rate: определяет влияние каждого дерева на конечный результат. GBM работает, начиная с начальной оценки, которая обновляется с использованием выходных данных каждого дерева. Параметр обучения контролирует величину этого изменения в оценках. Типичные значения: 0,1, 0,001, 0,003…

num_leaves: количество листьев в полном дереве, по умолчанию: 31.

устройство:по умолчанию: ЦП, также может передавать ГП

Параметр показателя

метрика: снова один из важных параметров, поскольку он определяет потери для построения модели. Ниже приведены несколько общих потерь для регрессии и классификации.

  • mae: означает абсолютную ошибку
  • mse: среднеквадратическая ошибка
  • binary_logloss: потеря для двоичной классификации
  • multi_logloss: потери для мультиклассификации

Параметр ввода-вывода

max_bin: обозначает максимальное количество интервалов, в которые будет помещено значение функции.

categorical_feature: обозначает индекс категорийных функций. Если categorical_features=0,1,2, то столбец 0, столбец 1 и столбец 2 являются категориальными переменными.

ignore_column: то же, что и categorical_features, только вместо того, чтобы рассматривать определенные столбцы как категориальные, он полностью их игнорирует.

save_binary: если вы действительно имеете дело с размером памяти вашего файла данных, укажите для этого параметра значение «True». Указание параметра true сохранит набор данных в двоичный файл, этот двоичный файл ускорит чтение данных в следующий раз.

Знание и использование вышеуказанных параметров определенно поможет вам реализовать модель. Помните, я сказал, что реализация LightGBM проста, но настройка параметров сложна. Итак, давайте сначала начнем с реализации, а затем я дам представление о настройке параметров.

Выполнение

Установка LGBM:

Установка LightGBM является важной задачей. Я нашел это как лучший ресурс, который поможет вам в установке LightGBM.

Я использую Anaconda, и установка LightGBM на anaconda является решающим фактором. Просто запустите следующую команду в командной строке Anaconda, и LightGBM уже на вашем ПК.

conda install -c conda-forge lightgbm

Набор данных:

Эти данные очень малы, всего 400 строк и 5 столбцов (специально используются для обучения). Это проблема классификации, в которой мы должны предсказать, купит ли клиент продукт из рекламы, размещенной на веб-сайте. Я не объясняю набор данных, поскольку набор данных не требует пояснений. Вы можете скачать датасет с моего диска.

Примечание. Набор данных чист и не содержит пропущенных значений. Основная цель выбора этих гораздо меньших данных — сделать все проще и понятнее.

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

Предварительная обработка данных:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# Importing the dataset
dataset = pd.read_csv('...input\\Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values# Splitting the dataset into the Training set and Test set
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

Построение модели и обучение:

Нам нужно преобразовать наши обучающие данные в формат набора данных LightGBM (это обязательно для обучения LightGBM).

После создания набора данных для преобразования я создал словарь Python с параметрами и их значениями. Точность вашей модели полностью зависит от значений, которые вы предоставляете параметрам.

В конечном блоке кода я просто обучил модель со 100 итерациями.

import lightgbm as lgbd_train = lgb.Dataset(x_train, label=y_train)params = {}
params['learning_rate'] = 0.003
params['boosting_type'] = 'gbdt'
params['objective'] = 'binary'
params['metric'] = 'binary_logloss'
params['sub_feature'] = 0.5
params['num_leaves'] = 10
params['min_data'] = 50
params['max_depth'] = 10clf = lgb.train(params, d_train, 100)

Несколько вещей, на которые стоит обратить внимание в параметрах:

  • В качестве цели используется «двоичный» (помните, что это проблема классификации)
  • Используется «binary_logloss» в качестве метрики (по той же причине, проблема с бинарной классификацией)
  • ‘num_leaves’=10 (так как это небольшие данные)
  • «тип повышения» — gbdt, мы реализуем повышение градиента (вы можете попробовать случайный лес)

Результаты:

Мы можем проверить результаты либо с помощью матрицы путаницы, либо непосредственно вычислив точность.

Код:

#Confusion matrixfrom sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)#Accuracyfrom sklearn.metrics import accuracy_score
accuracy=accuracy_score(y_pred,y_test)

Скриншоты результата:

Матрица путаницы

Оценка точности

Многие из вас, должно быть, думают, что я использовал меньший набор данных, и все же моя модель имеет точность 92%. Почему нет переобучения? Причина проста: я точно настроил параметры модели.

Итак, теперь давайте перейдем к точной настройке параметров.

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

Специалисты по данным всегда пытаются решить, когда какой параметр использовать? и каким должно быть идеальное значение этого параметра?

Следующий набор методов может быть использован для повышения эффективности вашей модели.

  1. num_leaves: это основной параметр для управления сложностью модели дерева. В идеале значение num_leaves должно быть меньше или равно 2^(max_depth). Значение больше этого приведет к переоснащению.
  2. min_data_in_leaf: большое значение позволяет избежать слишком глубокого роста дерева, но может привести к неполной подгонке. На практике для большого набора данных достаточно установить сотни или тысячи.
  3. max_depth: вы также можете использовать max_depth для явного ограничения глубины дерева.

Для повышения скорости:

  • Используйте пакетирование, установив bagging_fraction и bagging_freq
  • Используйте подвыборку объектов, установив feature_fraction
  • Используйте маленькие max_bin
  • Используйте save_binary для ускорения загрузки данных в будущем обучении
  • Используйте параллельное обучение, см. Руководство по параллельному обучению.

Для большей точности:

  • Используйте большие max_bin (может быть медленнее)
  • Используйте маленькие learning_rate с большими num_iterations
  • Используйте большие num_leaves (может привести к чрезмерной подгонке)
  • Используйте большие тренировочные данные
  • Попробуйте dart
  • Попробуйте использовать категориальную функцию напрямую

Чтобы справиться с переобучением:

  • Используйте маленькие max_bin
  • Используйте маленькие num_leaves
  • Используйте min_data_in_leaf и min_sum_hessian_in_leaf
  • Использовать пакетирование по наборам bagging_fraction и bagging_freq
  • Использовать подвыборку объектов по набору feature_fraction
  • Используйте большие тренировочные данные
  • Попробуйте lambda_l1, lambda_l2 и min_gain_to_split для регуляризации
  • Попробуйте max_depth, чтобы избежать роста глубокого дерева

Вывод:

Я применил LightGBM к нескольким наборам данных и обнаружил, что его точность бросает вызов другим алгоритмам повышения. Исходя из своего опыта, я всегда буду рекомендовать вам попробовать этот алгоритм хотя бы один раз.

Надеюсь, вам, ребята, понравился этот блог, и он был полезен для всех. Я хотел бы попросить вас дать предложение, которое поможет улучшить этот блог.

Источник: документация Microsoft LightGBM

Спасибо,

Правин Кумар