LGBMClassifier: руководство по началу работы - KDnuggets

LGBMClassifier: руководство по началу работы – KDnuggets

Исходный узел: 2793517

LGBMClassifier: руководство по началу работы
Изображение от редактора 
 

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

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

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

Теперь, когда у нас есть контекст о моделях ансамбля, давайте дважды щелкнем модель ансамбля усиления, в частности алгоритм Light GBM (LGBM), разработанный Microsoft. 

LGBMClassifier расшифровывается как Light Gradient Boosting Machine Classifier. Он использует алгоритмы дерева решений для ранжирования, классификации и других задач машинного обучения. LGBMClassifier использует новый метод односторонней выборки на основе градиента (GOSS) и эксклюзивного объединения функций (EFB) для точной обработки крупномасштабных данных, что эффективно ускоряет их работу и снижает использование памяти.

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

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

Что такое пакет эксклюзивных функций (EFB)?

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

Пакет LightGBM можно установить напрямую с помощью pip — менеджера пакетов Python. Введите приведенную ниже команду либо в терминале, либо в командной строке, чтобы загрузить и установить библиотеку LightGBM на свой компьютер:

pip install lightgbm

 

Пользователи Anaconda могут установить его с помощью команды «conda install», как указано ниже.

conda install -c conda-forge lightgbm

 

В зависимости от вашей ОС вы можете выбрать способ установки, используя этого руководства.

Теперь давайте импортируем LightGBM и другие необходимые библиотеки:

import numpy as np
import pandas as pd
import seaborn as sns
import lightgbm as lgb
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

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

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

titanic = sns.load_dataset('titanic')

 

Отбросьте ненужные столбцы, такие как «deck», «embark_town» и «alive», потому что они избыточны или не способствуют выживанию любого человека на корабле. Далее мы заметили, что признаки «возраст», «плата за проезд» и «посадка» имеют пропущенные значения — обратите внимание, что различные атрибуты вменяются с соответствующими статистическими показателями.

# Drop unnecessary columns
titanic = titanic.drop(['deck', 'embark_town', 'alive'], axis=1) # Replace missing values with the median or mode
titanic['age'] = titanic['age'].fillna(titanic['age'].median())
titanic['fare'] = titanic['fare'].fillna(titanic['fare'].mode()[0])
titanic['embarked'] = titanic['embarked'].fillna(titanic['embarked'].mode()[0])

 

Наконец, мы преобразуем категориальные переменные в числовые переменные, используя категориальные коды pandas. Теперь данные подготовлены для начала процесса обучения модели.

# Convert categorical variables to numerical variables
titanic['sex'] = pd.Categorical(titanic['sex']).codes
titanic['embarked'] = pd.Categorical(titanic['embarked']).codes # Split the dataset into input features and the target variable
X = titanic.drop('survived', axis=1)
y = titanic['survived']

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

Чтобы начать обучение модели LGBMClassifier, нам нужно разделить набор данных на входные функции и целевые переменные, а также наборы для обучения и тестирования, используя функцию train_test_split из scikit-learn.

# Split the dataset 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)

 

Давайте пометим кодировать категориальные («кто») и порядковые данные («класс»), чтобы гарантировать, что модель снабжена числовыми данными, поскольку LGBM не использует нечисловые данные.

class_dict = { "Third": 3, "First": 1, "Second": 2
}
who_dict = { "child": 0, "woman": 1, "man": 2
}
X_train['class'] = X_train['class'].apply(lambda x: class_dict[x])
X_train['who'] = X_train['who'].apply(lambda x: who_dict[x])
X_test['class'] = X_test['class'].apply(lambda x: class_dict[x])
X_test['who'] = X_test['who'].apply(lambda x: who_dict[x])

 

Далее мы указываем гиперпараметры модели в качестве аргументов конструктору или можем передать их как словарь методу set_params.  

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

params = { 'objective': 'binary', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9
}
clf = lgb.LGBMClassifier(**params)
clf.fit(X_train, y_train)

 

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

predictions = clf.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.84 0.89 0.86 105 1 0.82 0.76 0.79 74 accuracy 0.83 179 macro avg 0.83 0.82 0.82 179
weighted avg 0.83 0.83 0.83 179

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

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

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

Давайте настроим эти гиперпараметры и обучим новую модель:

model = lgb.LGBMClassifier(num_leaves=31, min_data_in_leaf=20, max_depth=5)
model.fit(X_train, y_train)

 

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.85 0.89 0.87 105 1 0.83 0.77 0.80 74 accuracy 0.84 179 macro avg 0.84 0.83 0.83 179
weighted avg 0.84 0.84 0.84 179

 

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

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

Отметка времени:

Больше от КДнаггетс