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
Volete dare un'occhiata a questo documento in lingua inglese del team Yandex sull'unicità matematica di CATBoost.
L'ho letto brevemente e tra le poche cose che ho capito rapidamente c'era il fatto che non usano i residui ottenuti su TRAIN per fare TRAIN , dal momento che questi residui creano una distorsione ottimistica della qualità dell'apprendimento. ( Aggiornamento: questa novità crea un modo per combattere il sovra-adattamento, che è uno dei motivi per cui l'algoritmo ha funzionato meglio rispetto ai suoi analoghi, oltre a una varietà di modi per preelaborare le variabili categoriali).
Mi dispiace per non averti dato una risposta specifica e completa.
Differenze matematiche tra GBM, XGBoost
Per prima cosa ti suggerisco di leggere un articolo di Friedman su Gradient Boosting Machine applicato in particolare a modelli di regressori lineari, classificatori e alberi delle decisioni. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
Non vorrei entrare nei dettagli qui. È solo una buona lettura che copre vari tipi di perdita (L) e oltre al concetto di importanza variabile. Ovviamente si tratta di una pietra miliare per l'implementazione del metodo di una discesa nello spazio delle funzioni (modelli di basso livello) piuttosto che dei parametri per perseguire la minimizzazione delle perdite.
Se guardi qui: https://arxiv.org/pdf/1603.02754.pdf
Trovi una vignetta matematica per il modello XGBoost di Tianqi Chen et al. Ora diventa interessante. Un paio di deviazioni matematiche di questo modello dal classico GBM di Friedman sono:
- Parametri regolarizzati (penalizzati) (e ricordiamo che i parametri nel boossting sono la funzione, alberi o modelli lineari): L1 e L2 sono disponibili.
- Utilizzo di derivati secondari per accelerare il processo (se è stato usato prima, correggimi).
A questo punto: guarda qui per trovare un'implementazione della perdita quantica in CATBoost, che è utile e fornisce sia il primo che il secondo derivato: 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;
} };
Sebbene non sia possibile trovare questa utile funzione di perdita L1 in XGBoost, puoi provare a confrontare l'implementazione di Yandex con alcune delle funzioni di perdita personalizzate scritte per XGB.
- Inoltre, CATBoost funziona in modo eccellente con le caratteristiche categoriche, mentre XGBoost accetta solo input numerici.
Considera questo link: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
Offrono una varietà di modi per fornire funzionalità categoriche alla formazione del modello, oltre all'uso di un vecchio approccio ben noto. Diminuire le dimensioni di uno spazio di input senza perdere molte informazioni è una delle possibili ragioni per cui il modello montato è meno equipaggiato.
Ho finito. Non uso LightGBM, quindi non posso far luce su di esso.