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
Desea ver este artículo en inglés del equipo de Yandex sobre la singularidad matemática de CATBoost.
Lo leí brevemente, y entre algunas cosas que pude entender rápidamente fue el hecho de que no usan los residuos obtenidos en TRAIN para hacer TRAIN , ya que estos residuos crean un sesgo optimista de la calidad del aprendizaje. ( Actualización: esta novedad ofrece una forma de combatir el sobreajuste, que es una de las razones por las que el algoritmo funcionó mejor en comparación con sus análogos, además de una variedad de formas de preprocesar variables categóricas).
Lamento no darle una respuesta específica y completa.
Diferencias matemáticas entre GBM, XGBoost
Primero, le sugiero que lea un artículo de Friedman sobre Gradient Boosting Machine aplicado a modelos de regresores lineales, clasificadores y árboles de decisión en particular. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
No entraría en los detalles aquí. Es solo una buena lectura que cubre varios tipos de pérdida (L) y además del concepto de importancia variable. Por supuesto, este es un documento histórico de implementación del método de un descenso en el espacio de funciones (modelos de bajo nivel) en lugar de parámetros para lograr la minimización de pérdidas.
Si miras aquí: https://arxiv.org/pdf/1603.02754.pdf
Encontrará una viñeta matemática para el modelo XGBoost de Tianqi Chen et al. Ahora se vuelve interesante. Un par de desviaciones matemáticas de este modelo del clásico GBM de Friedman son:
- Parámetros regularizados (penalizados) (y recordamos que los parámetros en el refuerzo son la función, los árboles o los modelos lineales): L1 y L2 están disponibles.
- Uso de segundas derivadas para acelerar el proceso (si se usó antes, corríjame).
En este punto: mire aquí para encontrar una implementación de la pérdida de cuantiles en CATBoost, que es útil y proporciona tanto la primera como la segunda derivada: 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;
} };
Si bien no puede encontrar esta útil función de pérdida L1 en XGBoost, puede intentar comparar la implementación de Yandex con algunas de las funciones de pérdida personalizadas escritas para XGB.
- Además, CATBoost funciona excelentemente con características categóricas, mientras que XGBoost solo acepta entradas numéricas.
Considere este enlace: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
Ofrecen una variedad de formas de alimentar características categóricas al entrenamiento del modelo además de usar el antiguo y conocido enfoque único. La disminución de las dimensiones de un espacio de entrada sin perder mucha información es una de las posibles razones por las que el modelo ajustado está menos equipado.
Termine. No uso LightGBM, así que no puedo arrojar ninguna luz sobre él.