25 votos

Árboles de refuerzo y ensacado (XGBoost, LightGBM)

Hay muchas entradas de blog, vídeos de YouTube, etc. sobre las ideas de embolsado o impulsar árboles. Mi comprensión general es que el pseudocódigo para cada uno es:

Embolsado:

  1. Tomar N muestras aleatorias del x% de las muestras y del y% de las características
  2. Ajuste su modelo (por ejemplo, árbol de decisión) a cada uno de los N
  3. Predecir con cada N
  4. Haz la media de las predicciones para obtener la predicción final

Impulso:

  1. Ajuste su modelo (por ejemplo, árbol de decisión) a sus datos
  2. Obtener los residuos
  3. Ajuste su modelo a los residuos
  4. Pasa a 2 para N rondas de refuerzo
  5. La predicción final es una suma ponderada de los predictores secuenciales.

Aceptaré cualquier aclaración a mi entendimiento anterior, pero mi pregunta prevista es la siguiente:

Tanto XGBoost como LightGBM tienen parámetros que permiten el embolsado. La aplicación no es Bagging O Boosting (que es de lo que hablan todas las entradas del blog), pero Bagging Y Refuerzo. ¿Cuál es el pseudocódigo que indica dónde y cuándo tiene lugar la combinación de bagging y boosting?

Esperaba que fuera "Bagged Boosted Trees", pero parece que es "Boosted Bagged Trees". La diferencia parece sustancial.

Árboles reforzados con bolsas:

  1. Tomar N muestras aleatorias del x% de las muestras y del y% de las características
  2. Ajustar árboles potenciados a cada una de las N muestras
  3. Predecir con cada N
  4. Haz la media de las predicciones para obtener la predicción final

Esta parece la mejor manera de hacerlo. Después de todo, el riesgo del boosting es el sobreajuste y el principal beneficio del bagging es reducir el sobreajuste.

Sin embargo, al examinar, por ejemplo, el scikit-learn gradient_boosting.py (que realiza el ensacado de muestras, pero no la selección aleatoria de características), y recopilando algunas pequeñas pepitas a través de posts sobre LightGBM y XGBoost, parece que XGBoost y LightGBM funcionan de la siguiente manera:

Árboles embolsados:

  1. Adapte un árbol de decisión a sus datos
  2. Para i en N rondas de refuerzo:
    • Obtener los residuos
    • si i mod frecuencia_bolsa == 0 (es decir, bolsa cada 5 rondas):
      • Tomar una única muestra aleatoria del x% de las muestras y el y% de las características; utilizar esta muestra aleatoria en adelante.
    • árbol de ajuste de los residuos
  3. La predicción final es una suma ponderada de los predictores secuenciales.

Por favor, corrijan lo que he entendido y completen los detalles. Boosted Bagged Tree (con sólo 1 árbol aleatorio por bag_frequency) no parece tan potente como Bagged Boosted Tree.

21voto

lnathan Puntos 123

Embolsado: Tomar N muestras aleatorias del x% de las muestras y el y% de las Características.

Las instancias se submuestrean repetidamente en Embolsado pero no Características. ( RandomForests , XGBoost y CatBoost hacer ambas cosas):

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

Incluya un paso de inicialización en su Impulsar pseudocódigo para eliminar la redundancia:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Árboles reforzados en bolsa (como usted lo llama) es ciertamente un Enfoque razonable, pero diferente de XGBoost ou CatBoost :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoost y CatBoost se basan en Impulsar y utilizar todos los datos de entrenamiento. También implementan el ensacado submuestreando una vez en cada iteración de boosting:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Si desea ceñirse a "ajustar el modelo a los residuos", esto equivaldría a "ajustar el modelo a los residuos de los datos en muestra bootstrap ".


Otras observaciones :

No hay " la mejor manera de hacerlo "como usted sugiere (no hay teorema del almuerzo gratis). Los "Bagged Boosted Trees" podrían superar a XGBoost en determinados conjuntos de datos.

Tomar una única muestra aleatoria del x% de las muestras

Esta línea es confusa. ¿De dónde la has sacado?

si i mod frecuencia_bolsa == 0 (es decir, bolsa cada 5 rondas):

Esto no debería mencionarse en su pseudocódigo. Especialmente cuando hay otros parámetros más importantes omitidos (como ritmo de aprendizaje en el refuerzo).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X