Différences mathématiques entre GBM, XGBoost, LightGBM, CatBoost?

33

Il existe plusieurs implémentations de la famille de modèles GBDT telles que:

  • GBM
  • XGBoost
  • LightGBM
  • Catboost.

Quelles sont les différences mathématiques entre ces différentes implémentations?

Catboost semble surpasser les autres implémentations même en utilisant uniquement ses paramètres par défaut en fonction de cette référence , mais il est toujours très lent.

Mon hypothèse est que catboost n'utilise pas les variables dummifiées, de sorte que le poids attribué à chaque variable (catégorielle) est plus équilibré que les autres implémentations, de sorte que les variables de cardinalité élevée n'ont pas plus de poids que les autres. Il permet au faible catégorique (à cardinalité faible) d’entrer dans certains arbres, d’où de meilleures performances. À part ça, je n'ai pas d'autre explication.

Métariat
la source
La référence référée est celle de l’équipe yandex / catboost, nous avons besoin d’une équipe indépendante.
mrgloom

Réponses:

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

Vous souhaitez consulter ce document en anglais de l'équipe Yandex sur l'unicité mathématique de CATBoost.

Je l'ai lu brièvement, et parmi les quelques choses que j'ai pu comprendre rapidement, il y a le fait qu'ils n'utilisent pas les résidus obtenus sur TRAIN pour faire TRAIN , car ces résidus créent un biais optimiste quant à la qualité de l'apprentissage. ( Mise à jour: cette nouveauté offre un moyen de lutter contre le surajustement, raison pour laquelle l’algorithme a mieux fonctionné par rapport à ses analogues, à l’exception de diverses façons de prétraiter les variables catégorielles).

Je suis désolé de ne pas vous donner une réponse précise et complète.

Différences mathématiques entre GBM et XGBoost

Tout d’abord, je vous suggère de lire un article de Friedman sur la machine de renforcement de gradient appliquée aux modèles de régresseurs linéaires, aux classificateurs et aux arbres de décision en particulier. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf

Je ne voudrais pas entrer dans les détails ici. C'est juste une bonne lecture couvrant divers types de pertes (L) et en plus du concept d'importance variable. Bien entendu, il s’agit d’un document déterminant de la mise en œuvre de la méthode de descente dans l’espace des fonctions (modèles de bas niveau) plutôt que des paramètres visant à minimiser les pertes.

Si vous regardez ici: https://arxiv.org/pdf/1603.02754.pdf

Vous trouvez une vignette mathématique pour le modèle XGBoost de Tianqi Chen et al. Maintenant cela devient intéressant. Quelques écarts mathématiques de ce modèle forment le GBM classique de Friedman:

  • Paramètres régularisés (pénalisés) (et nous nous rappelons que les paramètres du boossting sont la fonction, les arbres ou les modèles linéaires): L1 et L2 sont disponibles.

entrez la description de l'image ici

  • Utiliser des dérivées secondes pour accélérer le processus (s'il a été utilisé auparavant, corrigez-moi).

À ce stade: regardez ici pour trouver une implémentation de la perte quantile dans CATBoost, ce qui est très pratique et fournit à la fois des dérivées première et seconde: 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;
    } };

Bien que vous ne puissiez pas trouver cette fonction de perte L1 utile dans XGBoost, vous pouvez essayer de comparer la mise en œuvre de Yandex à certaines des fonctions de perte personnalisées écrites pour XGB.

  • En outre, CATBoost fonctionne parfaitement avec des fonctionnalités catégoriques, tandis que XGBoost accepte uniquement les entrées numériques.

Considérez ce lien: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic

Ils offrent une variété de façons d’intégrer des caractéristiques catégoriques à la formation de modèle en plus de l’utilisation d’une ancienne approche bien connue. La réduction des dimensions d'un espace d'entrée sans perdre beaucoup d'informations est l'une des raisons possibles pour lesquelles le modèle installé est moins suréquipé.

J'ai fini. Je n'utilise pas LightGBM, je ne peux donc pas y jeter de lumière.

Alexey dit Réintégrer Monica
la source
5
Je me demande pourquoi quelqu'un baisserait une réponse sans donner une meilleure réponse? Bienvenue sur scène pour donner votre avis en plus du vote anonyme anonyme, monsieur.
Alexey dit de réintégrer Monica
cela répond exactement à ma question pour le catboost. Avez-vous du matériel supplémentaire pour LightGBM, XGBoost et GBM?
Métariat
Oui, je vais obtenir ma réponse. Vous maîtrisez bien les calculs difficiles ou préférez-vous les explications intuitives?
Alexey dit: réintégrer Monica
Merci, je peux bien gérer les deux, l'explication intuitive est plus rapide à obtenir et les détails mathématiques prennent plus de temps, mais sont très bénéfiques pour une compréhension / implémentation plus poussée.
Métariat
1
Réponse enrichie.
Alexey dit: Réintégrer Monica