Підвищення та захоплення дерев (XGBoost, LightGBM)


17

Є багато повідомлень в блогах, відео на YouTube і т.д. про ідеях розфасовки або підвищення дерев. Моє загальне розуміння полягає в тому, що псевдокод для кожного такий:

Мішок:

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

Підвищення:

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

Я візьму будь-які роз’яснення до свого розуміння вище, але моє намічене запитання таке:

Як у XGBoost, так і в LightGBM є парами, які дозволяють створювати пакети. Додаток - це не Bagging OR Boosting (про що йдеться у кожному дописі блогу), а Baging AND Boosting. Що таке псевдокод для того, де і коли відбувається комбіноване пакування та прискорення?

Я очікував, що це будуть «задекоровані підсилені дерева», але, здається, це «підсилені деревця, що стримуються». Різниця здається істотною.

Заборонені підсилені дерева:

  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. Остаточний прогноз - це зважена сума послідовних прогнокторів.

Будь ласка, виправте моє розуміння тут і заповніть деталі. Підсилене мішковане дерево (лише 1 випадкове дерево на bag_frequency) не здається таким потужним, як Bagged Boosted Tree.


2
+1 за цікаве та дуже добре сформульоване запитання. І ласкаво просимо на сайт.
mkt - Відновити Моніку

вам потрібна "обчислити помилку" для вашого прискорення. Зроблено неправильно, що розпадається. Ваги є критичними для адабоуста. Це не сирий залишок. ... Ми не говоримо про стохастичний градієнт як необхідний прискорення, хоча це прискорює роботу.
EngrStudent

Ось підбухтоване. Замість нового дерева для кожного серійного кроку ви отримуєте новий ліс із середньою продуктивністю. Євген Тув та Карі Торккола. jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
Відновити Моніку

мішені, що підсилюються, збираються створити ліс із ансамблів серії та взяти середній вихід. Це може спричинити надмірну обробку, яку може створити ансамбль серії (підсилений), і дати більш надійний результат, але виграш не буде величезним.
EngrStudent

Відповіді:


13

Подання: Візьміть N випадкових вибірок x% вибірок та y% функцій

Примірники неодноразово піддаються вибірці у програмі Baging , але не Особливості. ( 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 

Включіть крок ініціалізації в псевдокод " Підвищення", щоб позбутися надмірності:

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 базуються на підсиленні та використовують усі дані про навчання. Вони також реалізують мішковування, підсилюючи один раз у кожному прискоренні Ітерації:

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) Приємна відповідь! Для уточнення: чи не є ОП неправильним у заяві " І XGBoost, і LightGBM мають параметри, які дозволяють проводити пакетування "?
mkt - Відновіть Моніку

Обидва дозволяють розфасовки: bagging_fraction в LightGBM і підвибірки в XGBoost . Не впевнений, чому я весь час посилався на CatBoost. Але всі вони працюють однаково щодо питання.
Лаксан Натан

Моя помилка, я пропустив рядок у вашій відповіді, який згадує це. Чи можете ви пояснити " підсистемування один раз у кожному прискореному ітерації "? Ви маєте на увазі, що при кожній підсилювальній ітерації прийнято багато підпроборів, дерева підходять до кожної підпробової групи, а потім коефіцієнт помилок розраховується виходячи з мішків, і нарешті ваги оновлені? Якщо так, чи можете ви уточнити це у своєму псевдокоді?
mkt - Відновіть Моніку

Немало субпроборів складається лише одна: Замість того, щоб модель підходила до всіх зважених екземплярів, модель тренується на зразку завантажувального завантаження.
Лаксан Натан

Щодо "Візьміть одну випадкову вибірку x% зразків"; краще було б "взяти один зразок x% рядків". Я отримав це звідси .
Джонатан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.