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
Ви хочете подивитися на цьому англомовному документі команди Yandex про математичну унікальність CATBoost.
Я прочитав це коротко, і серед кількох речей, які я міг швидко зрозуміти, це той факт, що вони не використовують залишки, отримані в TRAIN, щоб робити тренінги , оскільки ці залишки створюють оптимістичну упередженість якості навчання. ( Оновлення: ця новинка створює спосіб боротьби з надмірним приладом, що є однією з причин алгоритму працювати краще порівняно зі своїми аналогами, за винятком різноманітних способів попередньої обробки категоричних змінних).
Мені шкода, що не дав тобі конкретної і повної відповіді.
Математичні відмінності між GBM, XGBoost
Спочатку я пропоную вам прочитати документ Фрідмана про машину підсилення градієнтів, застосовану до лінійних регресорних моделей, класифікаторів та дерев рішень. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
Я б не пішов у деталі тут. Це просто хороше прочитання, що охоплює різні типи втрат (L) та, крім того, концепцію змінної важливості. Звичайно, це важливий документ про застосування методу спуску в просторі функцій (моделі низького рівня), а не параметрів для досягнення мінімізації втрат.
Якщо ви подивитесь тут: https://arxiv.org/pdf/1603.02754.pdf
Ви знайдете математичну віньєтку для моделі XGBoost від Tianqi Chen et al. Зараз це стає цікаво. Кілька математичних відхилень цієї моделі утворюють класичний Фрідман у ГБМ:
- Регламентовані (пенізовані) параметри (і ми пам’ятаємо, що параметри при збільшенні - це функція, дерева або лінійні моделі): L1 і L2 доступні.
- Використання других похідних для прискорення процесу (якщо він використовувався раніше, будь ласка, виправте мене).
До цього моменту: перегляньте тут, щоб знайти реалізацію кількісних втрат у CATBoost, яка стане в нагоді і надає як перший, так і другий похідні: 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;
} };
Хоча ви не можете знайти цю корисну функцію втрати L1 в XGBoost, ви можете спробувати порівняти реалізацію Yandex з деякими спеціальними функціями втрат, написаними для XGB.
- Крім того, CATBoost чудово працює з категоричними характеристиками, тоді як XGBoost приймає лише числові введення.
Розгляньте це посилання: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
Вони пропонують найрізноманітніші способи подати категоричні особливості до модельного навчання, окрім використання старого і добре відомого підходу, що працює на гарячій основі. Зменшення розмірів вхідного простору, не втрачаючи багато інформації, є однією з можливих причин, що вбудована модель є менш переобладнаною.
Я закінчив. Я не використовую LightGBM, тому не можу пролити світло на нього.