Mathematische Unterschiede zwischen GBM, XGBoost, LightGBM, CatBoost?

33

Es gibt verschiedene Implementierungen der GBDT-Modellfamilie, wie z.

  • GBM
  • XGBoost
  • LightGBM
  • Catboost.

Was sind die mathematischen Unterschiede zwischen diesen verschiedenen Implementierungen?

Catboost scheint die anderen Implementierungen zu übertreffen, selbst wenn nur die Standardparameter gemäß dieser Benchmark verwendet werden , aber es ist immer noch sehr langsam.

Ich vermute, dass catboost die gedummten Variablen nicht verwendet, sodass die Gewichtung jeder (kategorialen) Variablen im Vergleich zu den anderen Implementierungen ausgewogener ist, sodass die Variablen mit hoher Kardinalität nicht mehr Gewicht haben als die anderen. Dies ermöglicht es den schwachen kategorialen (mit geringer Kardinalität), in einige Bäume einzudringen, wodurch eine bessere Leistung erzielt wird. Ansonsten habe ich keine weitere Erklärung.

Metariat
quelle
Der referenzierte Benchmark stammt vom yandex / catboost-Team, wir brauchen einen unabhängigen.
Mrgloom

Antworten:

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

Sie möchten dieses englischsprachige Papier des Yandex-Teams über die mathematische Einzigartigkeit von CATBoost lesen.

Ich las es kurz und konnte unter anderem schnell nachvollziehen, dass sie die in TRAIN erhaltenen Residuen nicht für TRAIN verwenden , da diese Residuen eine optimistische Tendenz zur Lernqualität hervorrufen . ( Update: Diese Neuheit bietet eine Möglichkeit, die Überanpassung zu bekämpfen. Dies ist einer der Gründe, warum der Algorithmus im Vergleich zu seinen Analoga besser funktioniert, abgesehen von einer Vielzahl von Möglichkeiten, kategoriale Variablen vorzuverarbeiten.)

Es tut mir leid, dass ich Ihnen keine genaue und vollständige Antwort gegeben habe.

Mathematische Unterschiede zwischen GBM, XGBoost

Ich schlage vor, Sie lesen einen Artikel von Friedman über Gradient Boosting Machine, der insbesondere auf lineare Regressormodelle, Klassifikatoren und Entscheidungsbäume angewendet wird. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf

Ich würde hier nicht ins Detail gehen. Es ist nur eine gute Lektüre, die verschiedene Arten von Verlusten (L) und außerdem ein Konzept mit variabler Wichtigkeit abdeckt. Dies ist natürlich ein Meilenstein für die Implementierung der Methode des Abstiegs in den Funktionsraum (Low-Level-Modelle) anstelle von Parametern für das Streben nach Verlustminimierung.

Wenn Sie hier suchen: https://arxiv.org/pdf/1603.02754.pdf

Sie finden eine mathematische Vignette für das XGBoost-Modell von Tianqi Chen et al. Jetzt wird es interessant. Einige mathematische Abweichungen dieses Modells vom klassischen Friedman-GBM sind:

  • Regularisierte (bestrafte) Parameter (und wir erinnern uns, dass Parameter im Boosting die Funktion, Bäume oder lineare Modelle sind): L1 und L2 sind verfügbar.

Bildbeschreibung hier eingeben

  • Verwenden Sie zweite Ableitungen, um den Prozess zu beschleunigen (wenn es zuvor verwendet wurde, korrigieren Sie mich bitte).

Zu diesem Punkt: Hier finden Sie eine praktische Implementierung des Quantilverlusts in CATBoost, die sowohl die erste als auch die zweite Ableitung bereitstellt: 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;
    } };

Während Sie diese nützliche L1-Verlustfunktion in XGBoost nicht finden können, können Sie versuchen, die Implementierung von Yandex mit einigen der benutzerdefinierten Verlustfunktionen zu vergleichen, die für XGB geschrieben wurden.

  • Außerdem funktioniert CATBoost hervorragend mit kategorialen Funktionen, während XGBoost nur numerische Eingaben akzeptiert.

Betrachten Sie diesen Link: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic

Sie bieten eine Vielzahl von Möglichkeiten, um das Modelltraining zusätzlich zu dem alten und bekannten One-Hot-Ansatz mit kategorialen Funktionen zu versorgen. Das Verringern der Abmessungen eines Eingaberaums, ohne viele Informationen zu verlieren, ist einer der möglichen Gründe dafür, dass das angepasste Modell weniger überladen ist.

Ich bin fertig. Ich benutze kein LightGBM, kann also kein Licht darauf werfen.

Alexey sagt Reinstate Monica
quelle
5
Ich frage mich, warum jemand eine Antwort abgelehnt hat, ohne eine bessere Antwort zu geben? Willkommen auf der Bühne, um Beiträge zu liefern, die über anonymes Downvoting hinausgehen, Sir.
Alexey sagt Reinstate Monica
es antwortet genau auf meine frage nach dem catboost. Haben Sie zusätzliche Materialien für LightGBM, XGBoost und GBM?
Metariat
Ja, ich werde meine Antwort geben. Kommst du gut mit harter Mathematik zurecht oder bevorzugst du eher intuitive Erklärungen?
Alexey sagt Reinstate Monica
Vielen Dank, ich kann mit beidem gut umgehen, intuitive Erklärungen sind schneller zu bekommen und mathematische Details brauchen mehr Zeit, sind aber für das weitere Verständnis / die Implementierung sehr hilfreich.
Metariat
1
Antwort bereichert.
Alexey sagt Reinstate Monica