Differenze matematiche tra GBM, XGBoost, LightGBM, CatBoost?


33

Esistono diverse implementazioni della famiglia di modelli GBDT come:

  • GBM
  • XGBoost
  • LightGBM
  • Catboost.

Quali sono le differenze matematiche tra queste diverse implementazioni?

Catboost sembra sovraperformare le altre implementazioni anche usando solo i suoi parametri predefiniti secondo questo punto di riferimento , ma è ancora molto lento.

La mia ipotesi è che catboost non usi le variabili dummified, quindi il peso dato a ciascuna variabile (categorica) è più bilanciato rispetto alle altre implementazioni, quindi le variabili ad alta cardinalità non hanno più peso delle altre. Permette ai deboli categorici (con bassa cardinalità) di entrare in alcuni alberi, quindi prestazioni migliori. A parte questo, non ho ulteriori spiegazioni.


Il benchmark di riferimento è del team yandex / catboost, ne abbiamo bisogno uno indipendente.
mrgloom,

Risposte:


27
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.

inserisci qui la descrizione dell'immagine

  • 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.


5
Mi chiedo perché qualcuno dovrebbe sottovalutare una risposta senza dare una risposta migliore? Benvenuto sul palco per fornire qualsiasi input oltre a effettuare il downvoting anonimo, signore.
Alexey dice di reintegrare Monica il

risponde esattamente alla mia domanda per il catboost. Avete materiali supplementari per LightGBM, XGBoost e GBM?
Metariat il

Sì, inviterò la mia risposta. Ti occupi bene della matematica difficile o preferisci piuttosto spiegazioni intuitive?
Alexey dice di aver ripristinato Monica il

Grazie, posso farcela bene con entrambi, la spiegazione intuitiva è più rapida da ottenere e i dettagli matematici richiedono più tempo, ma è molto utile per ulteriori comprensione / implementazioni.
Metariat il

1
Risposta arricchita.
Alexey dice di reintegrare Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.