Анализ ядра LightGBM и настройка параметров

искусственный интеллект алгоритм Microsoft регулярное выражение
Анализ ядра LightGBM и настройка параметров

Введение

Как модель Microsoft с открытым исходным кодом за последние два года, LightGBM имеет следующие преимущества по сравнению с XGBoost:

  • Более высокая скорость обучения и более высокая эффективность:LightGBM использует алгоритм на основе гистограммы. Например, он объединяет непрерывные значения признаков в дискретные ячейки, что становится быстрее во время обучения. Другое делоСпособ разделения узлов LightGBM отличается от XGBoost.. LGB избегает метода разделения узлов всего слоя и использует метод глубокого разделения узлов с наибольшим выигрышем. Это экономит много ресурсов для разделения узлов. На рисунке 1 ниже показан метод разделения XGBoost, а на рисунке 2 показан метод разделения LightGBM.

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

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

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

  • Поддержка параллельного обучения

Введение в основные параметры LightGBM

мы все знаем,XGBoostЕсть три типа параметровОбщие параметры, параметры цели обучения, параметры бустера, затем для LightGBM у нас есть основные параметры, параметры управления обучением, параметры ввода-вывода, параметры цели, параметры измерения, параметры сети, параметры графического процессора, параметры модели, то, что я часто изменяю здесь, этоОсновные параметры, параметры управления обучением, метрические параметрыЖдать. Для получения более подробной информации см.Документация LightGBM на китайском языке

основные параметры

  1. boosting: также называемыйboost,boosting_type.по умолчаниюgbdt.

    Параметры бустинга в LGB гораздо больше, чем в xgb.У нас традиционныеgbdt, Также естьrf,dart,doss, последние два не очень понял, но я пробовал, и эффект gbdt более классический и стабильный

  2. num_thread: также известен какnum_thread,nthread.Укажите количество потоков.

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

  3. application: по умолчаниюregression. , также называемыйobjective,appЭто относится к цели миссии

    • regression
      • regression_l2, L2 loss, alias=regression, mean_squared_error, mse
      • regression_l1, L1 loss, alias=mean_absolute_error, mae
      • huber, Huber loss
      • fair, Fair loss
      • poisson, Poisson regression
      • quantile, Quantile regression
      • quantile_l2, аналогично квантилю, но использует потери L2
    • binary, binary log loss classification application
    • multi-class classification
      • multiclass, целевая функция softmax, должна быть установленаnum_class
      • multiclassova, бинарная целевая функция One-vs-All, должна быть установленаnum_class
    • cross-entropy application
      • xentropy, целевая функция является кросс-энтропийной (с необязательными линейными весами), alias=cross_entropy
      • xentlambda, вместо параметризованной кросс-энтропии, alias=cross_entropy_lambda
      • метки — произвольные значения в интервале [0, 1]
    • lambdarank, lambdarank application
      • В задаче lambdarank метка должна быть типа int, чем больше значение, тем выше корреляция (например, 0:плохо, 1:удовлетворительно, 2:хорошо, 3:отлично).
      • label_gainМожет использоваться для установки коэффициента усиления (веса) тега int.
  4. valid: выбор набора проверки, также известный какtest,valid_data, test_data, Поддерживает несколько наборов проверки для,сегментация

  5. learning_rate: также называемыйshrinkage_rate, размер шага градиентного спуска. По умолчанию установлено значение 0,1, мы обычно устанавливаем значение0.05-0.2между

  6. num_leaves: также называемыйnum_leaf, новая версия lgb изменяет это значение по умолчанию на 31, что представляет собой количество листьев на дереве.

  7. device: по умолчанию=процессор, параметры=процессор, графический процессор

    • Выберите оборудование для обучения дереву, вы можете использовать GPU для более быстрого обучения
    • Note: меньший max_bin (например, 63) рекомендуется для более высокой скорости
    • Note: чтобы ускорить обучение, GPU по умолчанию использует для суммирования 32-битные числа с плавающей запятой.Вы можете установить gpu_use_dp=true, чтобы включить 64-битные числа с плавающей запятой, но это замедлит обучение.
    • Note: Пожалуйста, обратитесь к руководству по установке, чтобы собрать версию GPU.

параметры управления обучением

  1. feature_fraction: по умолчанию = 1,0, тип = double, 0,0 sub_feature, colsample_bytree
    • Если feature_fraction меньше 1,0, LightGBM будет случайным образом выбирать подмножество функций на каждой итерации, например, если установлено значение 0,8, 80% функций будут выбраны до обучения каждого дерева.
    • Можно использовать для ускорения обучения.
    • Может использоваться для борьбы с переоснащением
  2. bagging_fraction: по умолчанию = 1,0, тип = double, 0,0 sub_row, subsample
    • Аналогичен feature_fraction, но будет случайным образом выбирать части данных без повторной выборки.
    • Можно использовать для ускорения обучения.
    • Может использоваться для борьбы с переоснащением
    • Note: чтобы включить бэггинг, для bagging_freq должно быть задано ненулевое значение.
  3. bagging_freq: по умолчанию=0, тип=int, также называетсяsubsample_freq
    • Частота мешков, 0 означает, что мешки отключены, k означает, что мешки выполняются каждые k итераций.
    • Note: Чтобы включить бэггинг, bagging_fraction устанавливается соответствующим образом.
  4. lambda_l1: значение по умолчанию — 0, также известное как reg_alpha, что означает регуляризацию L1, тип double.
  5. lambda_l2: значение по умолчанию — 0, также известное как reg_lambda, что означает регуляризацию L2, тип double.
  6. cat_smooth: по умолчанию=10, тип=двойной
    • для категориальных признаков
    • Это может уменьшить эффект шума в категориальных характеристиках, особенно для классов с небольшим объемом данных.

метрическая функция

  1. metric: default={l2 для регрессии}, {binary_logloss для двоичной классификации}, {ndcg для lambdarank}, type=multi-enum, options=l1, l2, ndcg, auc, binary_logloss, binary_error…
    • l1, absolute loss, alias=mean_absolute_error, mae
    • l2, square loss, alias=mean_squared_error, mse
    • l2_root, root square loss, alias=root_mean_squared_error, rmse
    • quantile, Quantile regression
    • huber, Huber loss
    • fair, Fair loss
    • poisson, Poisson regression
    • ndcg, NDCG
    • map, MAP
    • auc, AUC
    • binary_logloss, log loss
    • binary_error, образцы: 0 правильная классификация, 1 неправильная классификация
    • multi_logloss, многоклассовая классификация журналов потерь
    • multi_error, частота ошибок для мультикласса
    • xentropy, кросс-энтропия (с необязательными линейными весами), alias=cross_entropy
    • xentlambda, "взвешенная по интенсивности" перекрестная энтропия, псевдоним = cross_entropy_lambda
    • kldiv, Kullback-Leibler divergence, alias=kullback_leibler
    • Поддержка нескольких индикаторов, используйте для разделения

В целом, я все же думаю, что LightGBM мало чем отличается от XGBoost в использовании. Параметры также во многом пересекаются. Многие из основных принципов XGBoost также применимы к LightGBM. Точно так же Lgb также имеет функцию train() и функции LGBClassifier() и LGBRegressor(). Последние два в основном лучше подходят для использования sklearn, который аналогичен XGBoost.

Параметры GridSearch

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

я загружаю данные вздесь: Перейти непосредственно к коду!

import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import GridSearchCV  # Perforing grid search
from sklearn.model_selection import train_test_split

train_data = pd.read_csv('train.csv')   # 读取数据
y = train_data.pop('30').values   # 用pop方式将训练数据中的标签值y取出来,作为训练目标,这里的‘30’是标签的列名
col = train_data.columns   
x = train_data[col].values  # 剩下的列作为训练数据
train_x, valid_x, train_y, valid_y = train_test_split(x, y, test_size=0.333, random_state=0)   # 分训练集和验证集
train = lgb.Dataset(train_x, train_y)
valid = lgb.Dataset(valid_x, valid_y, reference=train)


parameters = {
              'max_depth': [15, 20, 25, 30, 35],
              'learning_rate': [0.01, 0.02, 0.05, 0.1, 0.15],
              'feature_fraction': [0.6, 0.7, 0.8, 0.9, 0.95],
              'bagging_fraction': [0.6, 0.7, 0.8, 0.9, 0.95],
              'bagging_freq': [2, 4, 5, 6, 8],
              'lambda_l1': [0, 0.1, 0.4, 0.5, 0.6],
              'lambda_l2': [0, 10, 15, 35, 40],
              'cat_smooth': [1, 10, 15, 20, 35]
}
gbm = lgb.LGBMClassifier(boosting_type='gbdt',
                         objective = 'binary',
                         metric = 'auc',
                         verbose = 0,
                         learning_rate = 0.01,
                         num_leaves = 35,
                         feature_fraction=0.8,
                         bagging_fraction= 0.9,
                         bagging_freq= 8,
                         lambda_l1= 0.6,
                         lambda_l2= 0)
# 有了gridsearch我们便不需要fit函数
gsearch = GridSearchCV(gbm, param_grid=parameters, scoring='accuracy', cv=3)
gsearch.fit(train_x, train_y)

print("Best score: %0.3f" % gsearch.best_score_)
print("Best parameters set:")
best_parameters = gsearch.best_estimator_.get_params()
for param_name in sorted(parameters.keys()):
    print("\t%s: %r" % (param_name, best_parameters[param_name]))