Есть много постов в блогах, видео на YouTube и т. Д. Об идеях создания мешков или повышения деревьев. Мое общее понимание таково, что псевдокод для каждого из них:
Bagging:
- Возьмите N случайных выборок x% выборок и y% функций
- Установите вашу модель (например, дерево решений) на каждый из N
- Прогнозировать с каждым N
- Усредните прогнозы, чтобы получить окончательный прогноз
Повышая:
- Подгоните вашу модель (например, дерево решений) к вашим данным
- Получить остатки
- Подгоните вашу модель к остаткам
- Перейти к 2 для N раундов повышения
- Окончательный прогноз - это взвешенная сумма последовательных предикторов.
Я приму любые пояснения к моему пониманию выше, но мой заданный вопрос заключается в следующем:
И XGBoost, и LightGBM имеют параметры, которые позволяют упаковывать пакеты. Приложение не Bagging OR Boosting (о чем говорится в каждом сообщении в блоге), а Bagging AND Boosting. Каков псевдокод для того, где и когда происходит объединение в пакеты и повышение?
Я ожидал, что это будут «Boosted Baged Trees», но, похоже, это «Boosted Bagged Trees». Разница кажется существенной.
Усиленные деревья в мешках:
- Возьмите N случайных выборок x% выборок и y% функций
- Подберите увеличенные деревья на каждом из N образцов
- Прогнозировать с каждым N
- Усредните прогнозы, чтобы получить окончательный прогноз
Это кажется лучшим способом сделать это. В конце концов, риск в повышении - это переоснащение, и основное преимущество мешков - это уменьшение переоснащения; мешки с кучей модернизированных моделей кажутся отличной идеей.
Тем не менее, при просмотре, например, scikit-learn
Gradient_boosting.py (который делает выборку пакетов, но не случайный выбор объектов) и объединении нескольких маленьких самородков в сообщениях о LightGBM и XGBoost, похоже, что XGBoost и LightGBM работают следующим образом:
Усиленные деревья в мешках:
- Подгоните дерево решений к вашим данным
- Для я в N бустеров:
- Получить остатки
- если я модифицирую bag_frequency == 0 (то есть, мешок каждые 5 раундов):
- Возьмите одну случайную выборку из x% выборок и y% функций; использовать эту случайную выборку в будущем
- подгонять дерево к остаткам
- Окончательный прогноз - это взвешенная сумма последовательных предикторов.
Пожалуйста, исправьте мое понимание здесь и заполните детали. Boosted Bagged Tree (всего 1 случайное дерево на bag_frequency) не так мощно, как Baged Boosted Tree.
Ответы:
Экземпляры повторно отбираются в Bagging , но не в Features. ( RandomForests , XGBoost и CatBoost делают оба):
Включите шаг инициализации в свой псевдокод Boosting, чтобы избавиться от избыточности:
Усиленные деревья в мешках (как вы это называете), безусловно, является разумным подходом, но отличается от XGBoost или CatBoost :
XGBoost и CatBoost основаны на Boosting и используют все данные обучения. Они также реализуют пакетирование путем подвыборки один раз в каждой ускоряющей итерации:
Если вы хотите придерживаться «подгонки модели к остаткам», то это будет эквивалентно «подгонке модели к остаткам данных в образце начальной загрузки ».
Дальнейшие замечания :
Как вы предлагаете, « лучшего способа сделать это » не существует (нет теоремы о бесплатном обеде). «Усиленные деревья в мешках» могут опережать XGBoost в определенных наборах данных.
Эта строка сбивает с толку. Откуда ты это взял?
Это не должно упоминаться в вашем псевдокоде. Особенно, когда пропущены другие более важные параметры (например, скорость обучения при повышении).
источник