В этом мы будем

  • Понимание ЛГБМ
  • Реализуйте его в наборе данных kaggle
  • Плюсы и минусы

Понимание ЛГБМ

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

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

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

Найдите лучшие точки разделения (на основе гистограммы).

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

Таким образом, все это делает LGBM быстрым и, следовательно, названным LightGBM, поскольку он может работать с большими данными и эффективен.

Он растет вертикально

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

Реализуйте его в наборе данных kaggle

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

import pandas as pd 
import numpy as np
import lightgbm as lgb

если у вас не установлен lightgbm

pip install lightgbm

Я сохранил данные из этого учебника, а тест и обучение объединены

data = pd.read_csv('./train_test_nullFill_break_1460.csv')

Давайте посмотрим на все функции, которые не являются непрерывными

obj_feat = list(data.loc[:, data.dtypes == 'object'].columns.values)
obj_feat

он будет выводить

['MSZoning','Street',....]

Но раздражающая часть, на решение которой ушел мой день, заключается в том, что lgbm не будет принимать категориальные данные в формате объекта или строковом формате, которые вы должны преобразовать в тип категориальный. Так

for feature in obj_feat:
    data[feature] = pd.Series(data[feature], dtype="category")

в настоящее время

train_df = pd.read_csv('./train.csv') # just forgot to save y values
X_train = data[:1260]
y_train = train_df['SalePrice'][:1260]
X_valid = data[1260:1460]
y_valid = train_df['SalePrice'][1260:]
test_df = data[1460:]

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

hyper_params = {
    'task': 'train',
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'metric': ['l2', 'auc'],
    'learning_rate': 0.005,
    "num_leaves": 128,  
    "max_bin": 512,
}
lgb_train = lgb.Dataset(X_train, y_train)
gbm = lgb.train(hyper_params, lgb_train, num_boost_round=10, verbose_eval=False)

А вот как просто с ним работать. нет необходимости обрабатывать категориальные переменные. Теперь давайте сохраним прогноз и отправим его на kaggle.

preds_3 = gbm0.predict(test_df)
pred = pd.DataFrame(preds_3)
sub_df=pd.read_csv('sample_submission.csv')
datasets = pd.concat([sub_df['Id'],pred],axis=1)
datasets.columns = ["Id",'SalePrice']
datasets.to_csv('lgbm_v1.csv',index=False)

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

Плюсы и минусы

Плюсы

  • Быстрый
  • Вам не нужно беспокоиться о категориальных переменных (вы можете, если хотите)
  • Это дает хорошие результаты

Минусы

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

Я надеюсь, что вы смогли получить что-то хорошее, если вы читаете до этого места. Если у вас есть какие-либо предложения, будем рады услышать их по почте по адресу [email protected].