Повышение И Упаковка Деревьев (XGBoost, LightGBM)


17

Есть много постов в блогах, видео на YouTube и т. Д. Об идеях создания мешков или повышения деревьев. Мое общее понимание таково, что псевдокод для каждого из них:

Bagging:

  1. Возьмите N случайных выборок x% выборок и y% функций
  2. Установите вашу модель (например, дерево решений) на каждый из N
  3. Прогнозировать с каждым N
  4. Усредните прогнозы, чтобы получить окончательный прогноз

Повышая:

  1. Подгоните вашу модель (например, дерево решений) к вашим данным
  2. Получить остатки
  3. Подгоните вашу модель к остаткам
  4. Перейти к 2 для N раундов повышения
  5. Окончательный прогноз - это взвешенная сумма последовательных предикторов.

Я приму любые пояснения к моему пониманию выше, но мой заданный вопрос заключается в следующем:

И XGBoost, и LightGBM имеют параметры, которые позволяют упаковывать пакеты. Приложение не Bagging OR Boosting (о чем говорится в каждом сообщении в блоге), а Bagging AND Boosting. Каков псевдокод для того, где и когда происходит объединение в пакеты и повышение?

Я ожидал, что это будут «Boosted Baged Trees», но, похоже, это «Boosted Bagged Trees». Разница кажется существенной.

Усиленные деревья в мешках:

  1. Возьмите N случайных выборок x% выборок и y% функций
  2. Подберите увеличенные деревья на каждом из N образцов
  3. Прогнозировать с каждым N
  4. Усредните прогнозы, чтобы получить окончательный прогноз

Это кажется лучшим способом сделать это. В конце концов, риск в повышении - это переоснащение, и основное преимущество мешков - это уменьшение переоснащения; мешки с кучей модернизированных моделей кажутся отличной идеей.

Тем не менее, при просмотре, например, scikit-learn Gradient_boosting.py (который делает выборку пакетов, но не случайный выбор объектов) и объединении нескольких маленьких самородков в сообщениях о LightGBM и XGBoost, похоже, что XGBoost и LightGBM работают следующим образом:

Усиленные деревья в мешках:

  1. Подгоните дерево решений к вашим данным
  2. Для я в N бустеров:
    • Получить остатки
    • если я модифицирую bag_frequency == 0 (то есть, мешок каждые 5 раундов):
      • Возьмите одну случайную выборку из x% выборок и y% функций; использовать эту случайную выборку в будущем
    • подгонять дерево к остаткам
  3. Окончательный прогноз - это взвешенная сумма последовательных предикторов.

Пожалуйста, исправьте мое понимание здесь и заполните детали. Boosted Bagged Tree (всего 1 случайное дерево на bag_frequency) не так мощно, как Baged Boosted Tree.


2
+1 за интересный и очень хорошо сформулированный вопрос. И добро пожаловать на сайт.
mkt - Восстановить Монику

вам нужно «вычислить ошибку» для вашего повышения. Совершено неправильно, что разваливается. Веса имеют решающее значение для adaboost. Это не сырой остаток. ... Мы не говорим о стохастическом градиенте, который необходим для повышения, хотя это ускоряет процесс.
EngrStudent - Восстановить Монику

Вот бустед-мешки. Вместо нового дерева для каждого шага серии вы получаете новый лес со средней производительностью. Евгений Тув и Кари Торккола. jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
EngrStudent - Восстановить Монику

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

Ответы:


13

Упаковка в мешки: возьмите N случайных образцов x% образцов и y% признаков

Экземпляры повторно отбираются в Bagging , но не в Features. ( RandomForests , XGBoost и CatBoost делают оба):

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

Включите шаг инициализации в свой псевдокод Boosting, чтобы избавиться от избыточности:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Усиленные деревья в мешках (как вы это называете), безусловно, является разумным подходом, но отличается от XGBoost или CatBoost :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoost и CatBoost основаны на Boosting и используют все данные обучения. Они также реализуют пакетирование путем подвыборки один раз в каждой ускоряющей итерации:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Если вы хотите придерживаться «подгонки модели к остаткам», то это будет эквивалентно «подгонке модели к остаткам данных в образце начальной загрузки ».


Дальнейшие замечания :

Как вы предлагаете, « лучшего способа сделать это » не существует (нет теоремы о бесплатном обеде). «Усиленные деревья в мешках» могут опережать XGBoost в определенных наборах данных.

Возьмите одну случайную выборку x% выборок

Эта строка сбивает с толку. Откуда ты это взял?

если я модифицирую bag_frequency == 0 (то есть, мешок каждые 5 раундов):

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


(+1) Хороший ответ! Чтобы уточнить: неправильно ли указана OP в выражении « И XGBoost, и LightGBM имеют параметры, которые позволяют упаковывать пакеты »?
mkt - Восстановить Монику

Оба допускают упаковку : bagging_fraction в LightGBM и подвыборку в XGBoost . Не уверен, почему я все время ссылался на CatBoost. Но все они работают одинаково в отношении вопроса.
Лаксан Натан

Моя ошибка, я пропустил строку в вашем ответе, которая упоминает это. Не могли бы вы объяснить « субсэмплинг один раз в каждой ускоряющей итерации »? Вы имеете в виду, что на каждой итерации бустинга берется много подвыборок, деревья подгоняются под каждую подвыборку, а затем рассчитывается коэффициент ошибочной классификации на основе деревьев в пакетах и, наконец, обновляются веса? Если да, не могли бы вы уточнить это в своем псевдокоде?
mkt - Восстановить Монику

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

Относительно «Взять одну случайную выборку из х% выборок»; Лучше было бы «взять один образец х% строк». Я получил это отсюда .
Джонатан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.