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