Diferenças matemáticas entre GBM, XGBoost, LightGBM, CatBoost?

33

Existem várias implementações da família de modelos GBDT, como:

  • GBM
  • XGBoost
  • LightGBM
  • Catboost.

Quais são as diferenças matemáticas entre essas diferentes implementações?

O Catboost parece ter um desempenho superior às outras implementações, mesmo usando apenas seus parâmetros padrão de acordo com essa marca de referência , mas ainda é muito lento.

Meu palpite é que o catboost não usa as variáveis ​​dumificadas, então o peso dado a cada variável (categórica) é mais equilibrado em comparação com as outras implementações, para que as variáveis ​​de alta cardinalidade não tenham mais peso que as outras. Permite que o categórico fraco (com baixa cardinalidade) entre em algumas árvores, resultando em melhor desempenho. Fora isso, não tenho mais explicações.

Metariat
fonte
O benchmark referido é pela equipe yandex / catboost, precisamos de um independente.
mrgloom 4/10

Respostas:

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

Você quer ver este artigo em inglês da equipe Yandex sobre a singularidade matemática do CATBoost.

Eu o li brevemente, e entre poucas coisas que pude entender rapidamente foi o fato de que eles não usam os resíduos obtidos no TRAIN para fazer o TRAIN , pois esses resíduos criam um viés otimista da qualidade do aprendizado. ( Atualização: essa novidade traz uma maneira de combater o sobreajuste, que é uma das razões pelas quais o algoritmo funcionou melhor em comparação com seus análogos, além de várias maneiras de pré-processar variáveis ​​categóricas).

Sinto muito por não lhe dar uma resposta específica e completa.

Diferenças matemáticas entre GBM, XGBoost

Primeiro, sugiro que você leia um artigo de Friedman sobre a Gradient Boosting Machine aplicada a modelos de regressores lineares, classificadores e árvores de decisão em particular. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf

Eu não iria nos detalhes aqui. É apenas uma boa leitura, cobrindo vários tipos de perda (L) e além do conceito de importância variável. É claro que este é um documento fundamental da implementação do método de uma descida no espaço de funções (modelos de baixo nível), em vez de parâmetros na busca da minimização de perdas.

Se você olhar aqui: https://arxiv.org/pdf/1603.02754.pdf

Você encontra uma vinheta matemática para o modelo XGBoost de Tianqi Chen et al. Agora isso se torna interessante. Alguns desvios matemáticos desse modelo do GBM de Friedman clássico são:

  • Parâmetros regularizados (penalizados) (e lembramos que os parâmetros no boossting são a função, árvores ou modelos lineares): L1 e L2 estão disponíveis.

insira a descrição da imagem aqui

  • Usando segundas derivadas para acelerar o processo (se já foi usado antes, por favor me corrija).

Até este ponto: procure aqui uma implementação da perda de quantis no CATBoost, que é útil e fornece a primeira e a segunda derivadas: 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;
    } };

Embora não seja possível encontrar essa útil função de perda L1 no XGBoost, você pode tentar comparar a implementação do Yandex com algumas das funções personalizadas de perda criadas para o XGB.

  • Além disso, o CATBoost funciona de maneira excelente com recursos categóricos, enquanto o XGBoost aceita apenas entradas numéricas.

Considere este link: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic

Eles oferecem uma variedade de maneiras de alimentar recursos categóricos para o treinamento do modelo, além de usar a abordagem one-hot antiga e conhecida. Diminuir as dimensões de um espaço de entrada sem perder muita informação é uma das possíveis razões pelas quais o modelo ajustado é menos adaptado.

Terminei. Eu não uso o LightGBM, por isso não posso lançar nenhuma luz sobre ele.

Alexey diz Restabelecer Monica
fonte
5
Eu me pergunto por que alguém rebaixaria uma resposta sem dar uma resposta melhor? Sejam bem-vindos ao palco para dar qualquer contribuição além da votação anônima, senhor.
Alexey diz Reinstate Monica
responde exatamente à minha pergunta para o catboost. Você tem algum material suplementar para LightGBM, XGBoost e GBM?
Metariat 18/10/19
Sim, eu enticharei minha resposta. Você lida bem com matemática difícil ou prefere explicações intuitivas?
Alexey diz Restabelecer Monica
Obrigado, eu posso lidar bem com os dois, a explicação intuitiva é mais rápida de obter e os detalhes matemáticos levam mais tempo, mas são muito benéficos para o entendimento / implementações adicionais.
Metariat 18/10/19
1
Resposta enriquecida.
Alexey diz Restabelecer Monica