Какой алгоритм берет корону: Легкий GBM против XGBOOST?

1. Что такое Light GBM?

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

Так как это поддерживаемые алгоритмы дерева решений, он расщепляет лист дерева с наиболее простой посадкой, в то время как другие алгоритмы форсирования расщепляют лист дерева по глубине или по уровню вместо листа. Таким образом, при выращивании на эквивалентном листе в Light GBM, алгоритм по умолчанию может уменьшить больше потерь, чем алгоритм по уровню, и, следовательно, привести к гораздо лучшей точности, которая редко может быть достигнута каким-либо из преобладающих алгоритмов форсирования. Кроме того, это удивительно быстро, отсюда и слово “Light”.

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

2. Преимущества солнечного света GBM

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

Меньшее использование памяти: Заменяет непрерывные значения на дискретные бины, которые заканчиваются меньшим использованием памяти.

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

Совместимость с большими наборами данных: он способен одинаково хорошо работать с большими наборами данных с большим сокращением времени обучения по сравнению с XGBOOST.

Поддерживается параллельное обучение.

Установка Light GBM

Для Windows

Использование Visual Studio (или MSBuild)

-Инсталлируйте git для windows, cmake и MS Build (MSbuild не нужен, если вы уже установили Visual Studio).

-Запустите следующую команду:

git-клон –recursive https://github.com/Microsoft/LightGBM.

компакт-диск LightGBM

мкдирское строительство

создание компакт-дисков

cmake -DCMAKE_GENERATOR_PLATFORM=x64 …

cmake –build . -цель ALL_BUILD -конфигурировать деблокировку .

Exe и dll будут находиться в папке LightGBM/Release.

Использование MinGW64

-Инсталлируйте git для окон, cmake и MinGW64.

-Запустите следующую команду:

git-клон –recursive https://github.com/Microsoft/LightGBM.

компакт-диск LightGBM

мкдирское строительство

создание компакт-дисков

смейк -G “MinGW Makefiles” …

mingw32-make.exe -j4

Exe и dll будут находиться в папке LightGBM/.

Для Linux

Light GBM использует cmake для создания . Выполнить следующее :

git-клон – рекурсивный https://github.com/Microsoft/LightGBM.

компакт-диск LightGBM

мкдирское строительство

создание компакт-дисков

кекс…

марка -j4

Для OSX

LightGBM зависит от OpenMP для компиляции, который не поддерживается Apple Clang.Пожалуйста, используйте gcc/g++ вместо него.

-Запустите следующее:

заварить установочную смесь

варочная установка gcc – без-мультиплиб

клон гита – рекурсивный https://github.com/Microsoft/LightGBM.

компакт-диск LightGBM

мкдирское строительство

создание компакт-дисков

кекс…

марка -j4

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

4. Важные параметры солнечного света GBM

задача : значение по умолчанию = поезд ; опции = поезд , предсказание ; Определяет задачу, которую мы хотим выполнить, которая является либо поездом, либо предсказанием.

приложение: default=regression, type=enum, options= options :

регрессия : выполнить задачу регрессии

бинарный : Двоичная классификация

мульти-класс: Мультиклассовая классификация

лямбдаранк : применение лямбдаранка

данные: type=string; тренировочные данные, LightGBM будет тренироваться на основе этих данных.

number_iterations: количество итераций форсирования; по умолчанию = 100; type=int

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

устройство : default= cpu ; options= gpu,cpu. Устройство, на котором мы хотели бы тренировать нашу модель. Выберите GPU для более быстрого обучения.

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

min_data_in_leaf: Минимальное количество знаний в одном листе.

function_fraction: значение по умолчанию=1 ; указывает долю функций, которая будет приниматься за каждую итерацию.

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

min_gain_to_split: default=.1 ; min gain to perform splitting

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

min_data_in_bin : мин. количество знаний в одном бине

num_threads: default=OpenMP_default, type=int ;Количество потоков для Light GBM.

label : type=string ; укажите столбец label

categoryical_feature : type=string ; укажите специфические особенности, которые мы хотели бы использовать для обучения нашей модели

num_class: по умолчанию=1 ; type=int ; используется только для классификации по нескольким классам

Кроме того, пройдите по этому тексту, объясняющему настройку параметров в XGBOOST в подробностях .

5. LightGBM против XGBoost

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

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

Вот ссылка на этот набор данных: http://archive.ics.uci.edu/ml/datasets/Adult.

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

импорт онемелый как пшт

импортировать панд в виде pd

из импорта панд Серия, DataFrame

#import lightgbm and xgboost

импортные фунты стерлингов

импорт xgboost как xgb

# загрузка нашего учебного набора данных ‘adult.csv’ с именем ‘данные’ с помощью pandas

data=pd.read_csv(‘adult.csv’,header=None)

#Присвоение имён к столбцам

data.columns=[‘age’,’workclass’,’fnlwgt’,’education’,’education-num’,’marital_Status’,’occupation’,’relationship’,’race’,’sex’,’capital_gain’,’capital_loss’,’hours_per_week’,’native_country’,’Income’].

#” Щебетание набора данных

data.head()

# Ярлык Кодирование нашей целевой переменной

от sklearn.preproprocessing import LabelEncoder, OneHotEncoder

l=LabelEncoder()

l.fit(data.income)

l.классы_

data.Income=Series(l.transform(data.income)))  #кодировка метки нашей целевой переменной

data.Income.value_counts()

#Одно горячее кодирование Категорических характеристик

one_hot_workclass=pd.get_dummies(data.workclass)

one_hot_education=pd.get_dummies(data.education)

one_hot_marital_Status=pd.get_dummies(data.marital_Status)

one_hot_occupation=pd.get_dummies(data.occupation)

one_hot_relationhip=pd.get_dummies(data.relationship)

one_hot_race=pd.get_dummies(data.race)

one_hot_sex=pd.get_dummies(data.sex)

one_hot_native_country=pd.get_dummies(data.native_country)

#удаление категориальных признаков

data.drop([“рабочий класс”, “образование”, “семейное положение”, “род занятий”, “отношения”, “раса”, “пол”, “родная страна”],axis=1,inplace=True)

#Сопоставляя одну горячую кодировку с нашим набором данных ‘данными’.

data=pd.concat([data,one_hot_workclass,one_hot_education,one_hot_marital_Status,one_hot_occupation,one_hot_occupation,one_hot_relation,one_hot_race,one_hot_sex,one_hot_native_country],axis=1)

#удаление дульпикатных колонн

_, i = np.unique(data.columns, return_index=True)

data=data.iloc[:, i]

#Наша целевая переменная – “Доход” со значениями 1 или 0.

# Разделение наших данных на набор данных x и целевой набор y.

x=data.drop(‘Income’,axis=1)

y=данные. Доходы

#Удаление пропущенных значений в нашей целевой переменной

y.fillna(y.mode()[0],inplace=True)

#Сейчас же разделить наш набор данных на тест и тренироваться#

из sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.3)

#Применение xgboost

#Данные хранятся в объекте DMatrix.

#label используется для определения нашей переменной результата.

dtrain=xgb.DMatrix(x_train,label=y_train)

dtest=xgb.DMatrix(x_test)

#установка параметров для xgboost

параметры={‘max_depth’:7, ‘eta’:1, ‘silent’:1, ‘objective’: ‘binary:logistic’, ‘eval_metric’: ‘auc’, ‘learning_rate’:.05}

#тренируя нашу модель

число_округ=50

дата импорта дата

start = datetime.now()

xg=xgb.train(parameters,dtrain,num_round)

stop = datetime.now()

#Время исполнения модели

execution_time_xgb = стоп-старт

execution_time_xgb

#datetime.timedelta( , , ) представление => (дни, секунды, микросекунды)

#ново предсказывая нашу модель на испытательном стенде

ypred=xg.predict(dtest)

ypred

# Преобразование вероятностей в 1 или 0

для i в диапазоне(0,9769):

если ypred[i]>=.5: # установка порога .5.

ypred[i]=1

Иначе:

ипред[и]=0

#вычисление точности нашей модели

из sklearn.metrics import accuracy_score

accuracy_xgb = accuracy_score(y_test,ypred)

точность_xgb

# Light GBM

train_data=lgb.Dataset(x_train,label=y_train)

#установка параметров для lightgbm

param = {‘num_leaves’:150, ‘objective’: ‘binary’, ‘max_depth’:7, ‘learning_rate’:.05, ‘max_bin’:200}

param[‘metric’] = [‘auc’, ‘binary_logloss’]

#Here мы установили max_depth в xgb и LightGBM в 7, чтобы иметь справедливое сравнение между ними.

#тренируя нашу модель с помощью Light Gbm. #

число_округ=50

start=datetime.now()

lgbm=lgb.train(param,train_data,num_round)

stop=datetime.now()

#Время исполнения модели

execution_time_lgbm = стоп-старт

execution_time_lgbm

#предсказание на тестовом наборе

ypred2=lgbm.predict(x_test)

ypred2[0:5] # показывая первые 5 предсказаний

# преобразуя вероятности в 0 или 1

для i в диапазоне(0,9769):

если ypred2[i]>=.5: # установка порога .5.

ypred2[i]=1

Иначе:

ypred2[i]=0

# точность расчёта

accuracy_lgbm = accuracy_score(ypred2,y_test)

точность_гбм

y_test.value_counts()

из sklearn.metrics импортировать roc_auc_score

#вычисление roc_auc_score для xgboost

auc_xgb = roc_auc_score(y_test,ypred)

auc_xgb

#вычисление roc_auc_score для light gbm.

auc_lgbm = roc_auc_score(y_test,ypred2)

auc_lgbm comparison_dict = {‘accuracy score’:(accuracy_lgbm,accuracy_xgb),’auc score’:(auc_lgbm,auc_xgb),’performance time’:(execution_time_lgbm,execution_time_xgb)}

#Создание кадра данных ‘comparison_df’ для сравнения производительности Lightgbm и xgb.

comparison_df = DataFrame(comparison_dict)

comparison_df.index= [‘LightGBM’, ‘xgboost’]

comparison_dfelow правильно.

Сравнение производительности

https://cdn.analyticsvidhya.com/wp-content/uploads/2017/06/11200955/result.png

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

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

6. Настройка Параметры солнечного света GBM

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

Для лучшей подгонки

num_leaves : Этот параметр используется для выстраивания в линию количества листьев, которое должно быть сформировано в дереве. Теоретически отношение между Num_leaves и max_depth равно num_leaves= 2^(max_depth). Однако, часто это не является честной оценкой только в случае GBM с солнечным светом, так как расщепление происходит по мудрости листьев, а не по глубине. Следовательно, набор num_leaves должен быть меньше 2^(max_depth), иначе это приведет к переподбору. Светлый GBM не имеет непосредственной связи между цифрами num_leaves и max_depth и поэтому 2 не должны быть связаны друг с другом .

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

max_depth : указывает максимальную глубину или уровень, до которого дерево может вырасти.

Для более быстрой скорости

bagging_фракция : используется для выполнения bagging для более быстрых результатов

feature_fraction : Установите дробь функций, которая будет использоваться при каждой итерации.

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

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

Использовать большие данные по обучению

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

max_bin : Установка на высокое значение имеет тот же эффект, что и увеличение значения num_leaves, а также замедляет нашу тренировочную процедуру.