My guess is that catboost doesn't use the dummified variables, so the weight given to each (categorical) variable is more balanced compared to the other implementations, so the high-cardinality variables don't have more weight than the others.
https://arxiv.org/abs/1706.09516
Chcesz spojrzeć na ten artykuł w języku angielskim z zespołu Yandex na temat matematycznej wyjątkowości CATBoost.
Przeczytałem to krótko i wśród kilku rzeczy, które mogłem szybko zrozumieć, był fakt, że nie wykorzystują one resztek uzyskanych w TRAIN do zrobienia TRAIN , ponieważ te resztki tworzą optymistyczne nastawienie do jakości uczenia się. ( Aktualizacja: ta nowość umożliwia walkę z nadmiernym dopasowaniem, co jest jednym z powodów, dla których algorytm działał lepiej w porównaniu z analogami, oprócz różnych sposobów wstępnego przetwarzania zmiennych kategorialnych).
Przykro mi, że nie podałem konkretnej i pełnej odpowiedzi.
Różnice matematyczne między GBM, XGBoost
Najpierw proponuję przeczytać artykuł Friedmana na temat maszyny do zwiększania gradientu zastosowanej w szczególności do modeli regresora liniowego, klasyfikatorów i drzew decyzyjnych. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
Nie wchodziłbym w szczegóły tutaj. To tylko dobra lektura obejmująca różne rodzaje strat (L) i oprócz koncepcji o zmiennym znaczeniu. Oczywiście jest to kamień milowy wdrożenia metody zejścia w przestrzeni funkcji (modele niskiego poziomu), a nie parametrów w dążeniu do minimalizacji strat.
Jeśli zajrzysz tutaj: https://arxiv.org/pdf/1603.02754.pdf
Znajdziesz matematyczną winietę dla modelu XGBoost autorstwa Tianqi Chen i in. Teraz robi się ciekawie. Kilka matematycznych odchyleń tego modelu od klasycznego GBM Friedmana to:
- Parametry regulowane (karane) (i pamiętamy, że parametry w boosstingu to funkcja, drzewa lub modele liniowe): L1 i L2 są dostępne.
- Używanie drugich pochodnych w celu przyspieszenia procesu (jeśli był używany wcześniej, proszę mnie poprawić).
Do tego momentu: spójrz tutaj, aby znaleźć implementację utraty kwantyli w CATBoost, która jest przydatna i zapewnia zarówno pierwszą, jak i drugą pochodną: https://github.com/catboost/catboost/blob/master/catboost/libs/algo/ error_functions.h
class TQuantileError : public IDerCalcer<TQuantileError, /*StoreExpApproxParam*/ false> { public:
const double QUANTILE_DER2 = 0.0;
double Alpha;
SAVELOAD(Alpha);
explicit TQuantileError(bool storeExpApprox)
: Alpha(0.5)
{
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
TQuantileError(double alpha, bool storeExpApprox)
: Alpha(alpha)
{
Y_ASSERT(Alpha > -1e-6 && Alpha < 1.0 + 1e-6);
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
double CalcDer(double approx, float target) const {
return (target - approx > 0) ? Alpha : -(1 - Alpha);
}
double CalcDer2(double = 0, float = 0) const {
return QUANTILE_DER2;
} };
Chociaż nie możesz znaleźć tej użytecznej funkcji utraty L1 w XGBoost, możesz spróbować porównać implementację Yandex z niektórymi niestandardowymi funkcjami utraty napisanymi dla XGB.
- Poza tym CATBoost działa doskonale z funkcjami jakościowymi, podczas gdy XGBoost akceptuje tylko dane liczbowe.
Rozważ ten link: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
Oferują one różne sposoby dodawania jakościowych funkcji do treningu modelowego, a także stosowania starego i dobrze znanego podejścia typu „one-hot”. Zmniejszenie wymiarów przestrzeni wejściowej bez utraty dużej ilości informacji jest jednym z możliwych powodów, dla których dopasowany model jest mniej przebudowany.
Skończyłem. Nie używam LightGBM, więc nie mogę rzucić na to światła.