В этом мы будем
- Понимание ЛГБМ
- Реализуйте его в наборе данных 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].