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

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

1. Почему мы должны использовать LightGBM

2. Когда нам следует использовать LightGBM

3. Что такое LightGBM

4. Как использовать LightGBM

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

Начнем с первого вопроса.

Почему мы должны использовать LightGBM?

Как специалист по данным, который уже давно работает над контролируемым обучением, я считаю, что LightGBM (Light Gradient Boosting Machine) — отличный выбор для проектов машинного обучения. Вот несколько основных причин, по которым вам следует рассмотреть возможность использования LightGB.

Скорость:

LightGBM разработан, чтобы быть чрезвычайно быстрым и эффективным. Он использует подход на основе гистограммы для разделения данных на дискретные ячейки, что уменьшает количество разбиений, необходимых в дереве решений. Это приводит к более быстрому обучению и прогнозированию, что делает его отличным выбором для больших наборов данных и приложений реального времени. Например, допустим, у вас есть набор данных с 1 миллионом строк и 500 функциями. Обучение модели повышения градиента на этом наборе данных может занять много времени, особенно если вы используете традиционный алгоритм повышения градиента, такой как GradientBoosting или XGBoost. Однако с LightGBM подход на основе гистограммы может значительно сократить количество разбиений, необходимых в дереве решений, что приводит к более быстрому обучению и времени прогнозирования.

Масштабируемость:

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

Например, допустим, у вас есть набор данных с 10 миллионами строк и 1000 признаков. Традиционные алгоритмы повышения градиента могут иметь проблемы с размером этого набора данных, но масштабируемость LightGBM делает его отличным выбором для обработки больших наборов данных.

Точность:

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

Например, в соревновании Kaggle по прогнозированию продажных цен на дома LightGBM использовали несколько лучших команд. Способность алгоритма обрабатывать категориальные характеристики и его встроенные методы регуляризации способствовали его превосходной производительности. Точность. Например, в конкурсе Kaggle по прогнозированию цен продажи домов LightGBM использовался несколькими наиболее успешными командами. Способность алгоритма обрабатывать категориальные признаки и его встроенные методы регуляризации способствовали его превосходной производительности.

Автоматическая обработка пропущенных значений:

LightGBM может автоматически обрабатывать отсутствующие значения в данных, не требуя вменения. Это может значительно сэкономить время, поскольку вменение пропущенных значений может быть сложной и трудоемкой задачей.

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

Поддержка категорийных функций:

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

6. Встроенная регуляризация:

LightGBM включает встроенные методы регуляризации, такие как регуляризация L1 и L2, которые могут помочь предотвратить переоснащение и улучшить обобщение модели.

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

Когда следует использовать LiGBM?

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

Вот несколько конкретных сценариев, в которых модели LightGBM могут быть хорошим выбором:

Большие наборы данных:

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

Смешанные типы данных:

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

Многомерные данные:

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

Несбалансированные наборы данных:

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

Быстрое время обучения:

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

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

Теперь мы знаем ответ, почему и когда давайте также поймем, когда не использовать LiGBM или давайте посмотрим на минусы LiGBM.

Когда не следует использовать LiGBM?

  1. Меньший набор данных: как правило, LightGBM не следует использовать для небольших наборов данных, так как это может привести к переполнению данных и снижению производительности.
  2. Высокая размерность: LightGBM чувствителен к количеству функций, поэтому, если у вас есть многомерный набор данных со многими функциями, LightGBM может работать плохо.
  3. Линейные данные: LightGBM специально разработан для захвата нелинейных отношений в переменных. Следовательно, если данные линейно связаны, использование LightGBM может не дать каких-либо серьезных улучшений по сравнению с более простыми линейными моделями.
  4. Ограниченные вычислительные ресурсы: Обучение LightGBM может быть дорогостоящим в вычислительном отношении, особенно для больших наборов данных или при использовании множества функций. Поэтому, если у вас ограниченные вычислительные ресурсы, это может быть не лучший выбор.

Отлично, теперь мы знаем, почему и когда следует использовать LiGBM. Давайте перейдем к нашему самому важному вопросу.

Что такое LiGBM?

LightGBM (сокращение от Light Gradient Boosting Machine) — это фреймворк для повышения градиента с открытым исходным кодом, который разработан, чтобы быть быстрым, масштабируемым и точным. Он был разработан Microsoft и выпущен в 2017 году и с тех пор стал популярным выбором для задач машинного обучения, таких как классификация, регрессия и ранжирование.

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

LightGBM использует ряд инновационных методов для повышения производительности и эффективности алгоритма повышения градиента, в том числе:

Односторонняя выборка на основе градиента (GOSS):

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

GOSS — это метод двухэтапной выборки, который решает эти проблемы путем выборочной выборки обучающих данных на основе значений градиента. Первый этап GOSS заключается в сортировке обучающих примеров по их абсолютным значениям градиента. Это делается для выявления примеров с самыми высокими градиентами, которые наиболее важны для обучения и обновления модели.

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

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

Эксклюзивное объединение функций (EFB):

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

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

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

Усиление градиента на основе гистограммы:

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

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

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

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

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

Гиперпараметры LiGBM:

Вот некоторые из наиболее часто используемых гиперпараметров в LightGBM:

boosting_type: этот параметр указывает тип используемого алгоритма повышения. Он может принимать значения gbdt (традиционное дерево принятия решений с повышением градиента), dart (деревья адаптивной регрессии на основе отсева) или goss (односторонняя выборка на основе градиента).

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

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

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

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

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

min_data_in_leaf: этот параметр задает минимальное количество точек данных, необходимых для формирования листа в каждом дереве решений. Более высокое значение может помочь предотвратить переобучение, заставляя каждый лист содержать больше точек данных, но также может привести к недообучению.

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

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

Как использовать LiGBM?

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

В этом примере мы сначала загружаем данные и разделяем их на наборы для обучения и тестирования. Затем мы конвертируем данные в формат LightGBM с помощью функции lgb.Dataset. Мы определяем гиперпараметры для модели и используем функцию lgb.train для обучения модели с использованием обучающих данных. Мы указываем проверочный набор в качестве данных тестирования и используем раннюю остановку для предотвращения переобучения.

Code :
import lightgbm as lgb
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# Load data
data = pd.read_csv('data.csv')
X = data.drop('label', axis=1)
y = data['label']
# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Convert data to LightGBM format
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)
# Define hyperparameters
params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'auc',
'num_leaves': 31,
'learning_rate': 0.05,
'feature_fraction': 0.9,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'verbose': 0
}
# Train the model
num_rounds = 100
model = lgb.train(params, train_data, num_rounds, valid_sets=[test_data], early_stopping_rounds=10)
# Make predictions on test set
y_pred = model.predict(X_test)
# Evaluate performance
from sklearn.metrics import roc_auc_score
print("ROC AUC score on test set: ", roc_auc_score(y_test, y_pred))

Наконец, мы делаем прогнозы на тестовом наборе, используя метод прогнозирования объекта модели, и оцениваем производительность, используя показатель ROC AUC. В этом примере показано, как использовать LightGBM для обучения модели бинарной классификации, но те же принципы можно применить и к другим типам задач, таким как регрессия или многоклассовая классификация.

Основные выводы:

1.LightGBM — хороший выбор, когда вам нужна модель, которая может обрабатывать большие многомерные наборы данных с сочетанием категориальных и непрерывных функций.

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

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

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

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