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
Te interesa ver este artículo en inglés del equipo de Yandex sobre la singularidad matemática de CATBoost.
Lo leí brevemente, y entre las pocas cosas que pude entender rápidamente fue el hecho de que no utilizan los residuos obtenidos en TREN para hacer TREN ya que estos residuos crean un sesgo optimista de la calidad del aprendizaje. ( Actualización: esta novedad aporta 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 las variables categóricas).
Siento no haberle dado una respuesta concreta y completa.
Diferencias matemáticas entre GBM y XGBoost
En primer lugar te sugiero que leas 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
Yo no entraría en detalles aquí. Es sólo una buena lectura que cubre varios tipos de pérdida (L) y además el concepto de importancia variable. Por supuesto, se trata de un documento que marca un hito en la aplicación del método de descenso en el espacio de las funciones (modelos de bajo nivel) en lugar de los parámetros en la búsqueda de la minimización de las pérdidas.
Si miras aquí: https://arxiv.org/pdf/1603.02754.pdf
Se encuentra 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 forman el clásico GBM de Friedman:
- Parámetros regularizados (penalizados) (y recordamos que los parámetros en el boossting son la función, los árboles o los modelos lineales): L1 y L2 están disponibles.
![enter image description here]()
- Utilizar las segundas derivadas para acelerar el proceso (si se utilizó antes por favor corrígeme).
A este respecto: mire aquí para encontrar una implementación de la pérdida cuantílica en CATBoost, que viene muy bien 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;
} };
Aunque 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 sólo acepta entradas numéricas.
Tenga en cuenta 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 las características categóricas para el entrenamiento del modelo, además de utilizar el viejo y conocido enfoque de una sola vez. 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 sobreajustado.
He terminado. No utilizo LightGBM, así que no puedo arrojar ninguna luz al respecto.