Istnieje wiele postów na blogach, filmów na YouTube itp. O pomysłach spakowania lub ulepszenia drzew. Z mojego ogólnego zrozumienia wynika, że pseudo kod dla każdego z nich to:
Parcianka:
- Weź N losowych próbek x% próbek i y% funkcji
- Dopasuj swój model (np. Drzewo decyzyjne) do każdego z N
- Przewiduj z każdym N
- Uśrednij prognozy, aby uzyskać ostateczną prognozę
Zwiększenie:
- Dopasuj swój model (np. Drzewo decyzyjne) do swoich danych
- Zdobądź resztki
- Dopasuj swój model do resztek
- Przejdź do 2 dla N rund podwyższających
- Ostateczna prognoza jest ważoną sumą sekwencyjnych predyktorów.
Przedstawię wszelkie wyjaśnienia do mojego zrozumienia powyżej, ale moje zamierzone pytanie jest następujące:
Zarówno XGBoost, jak i LightGBM mają parametry umożliwiające pakowanie. Aplikacja nie jest Bagging OR Boosting (o tym mówi każdy post na blogu), ale Bagging AND Boosting. Jaki jest pseudo kod, gdzie i kiedy ma miejsce łączone pakowanie i wzmacnianie?
Spodziewałem się, że będzie to „Bagged Boosted Trees”, ale wygląda na to, że to „Boosted Bagged Trees”. Różnica wydaje się znaczna.
Drzewa wzmocnione w workach:
- Weź N losowych próbek x% próbek i y% funkcji
- Dopasuj wzmocnione drzewa do każdej z N próbek
- Przewiduj z każdym N
- Uśrednij prognozy, aby uzyskać ostateczną prognozę
To wydaje się najlepszym sposobem na zrobienie tego. W końcu ryzyko przyśpieszenia to nadmierne dopasowanie, a podstawową korzyścią z workowania jest ograniczenie nadmiernego dopasowania; spakowanie kilku ulepszonych modeli wydaje się świetnym pomysłem.
Jednak po przejrzeniu, na przykład scikit-learn
gradient_boosting.py (który wykonuje spakowanie próbek, ale nie losowy wybór funkcji) i zestawieniu kilku małych samorodków w postach dotyczących LightGBM i XGBoost, wygląda na to, że XGBoost i LightGBM działają w następujący sposób:
Zwiększone spakowane drzewa:
- Dopasuj drzewo decyzyjne do swoich danych
- Dla rund wzmacniających i in:
- Zdobądź resztki
- if i mod bag_frequency == 0 (tzn. torba co 5 rund):
- Weź pojedynczą losową próbkę x% próbek i y% cech; skorzystaj z tej losowej próbki
- dopasuj drzewo do resztek
- Ostateczna prognoza jest ważoną sumą sekwencyjnych predyktorów.
Popraw moje rozumienie tutaj i podaj szczegółowe informacje. Boosted Bagged Tree (z tylko 1 losowym drzewem na bag_frequency) nie wydaje się tak potężny jak Bagged Boosted Tree.
Odpowiedzi:
Instancje są wielokrotnie poddawane próbce w Bagging , ale nie Funkcje. ( RandomForests , XGBoost i CatBoost robią oba):
Dołącz krok inicjalizacji do swojego pseudo kodu Boosting, aby pozbyć się nadmiarowości:
Bagged Boosted Trees (jak to nazywasz) jest z pewnością rozsądnym podejściem, ale różni się od XGBoost lub CatBoost :
XGBoost i CatBoost są zarówno na podstawie Pobudzanie i używać wszystkich danych treningowych. Wprowadzają również tworzenie worków poprzez podpróbkowanie raz w każdej Iteracji podwyższającej:
Jeśli chcesz trzymać się „dopasuj model do reszt”, będzie to równoznaczne z „dopasuj model do reszt danych w próbce bootstrap ”.
Dalsze uwagi :
Nie ma „ najlepszego sposobu na zrobienie tego ”, jak sugerujesz (brak twierdzenia o darmowym obiedzie). „Bagged Boosted Trees” może przewyższyć XGBoost w niektórych zestawach danych.
Ta linia jest myląca. Skąd to masz?
Nie powinno to być wspomniane w twoim pseudo-kodzie. Zwłaszcza, gdy pominięto inne, ważniejsze parametry (takie jak tempo uczenia się podczas zwiększania).
źródło