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:
- Tomar N muestras aleatorias del x% de las muestras y del y% de las características
- Ajuste su modelo (por ejemplo, árbol de decisión) a cada uno de los N
- Predecir con cada N
- Haz la media de las predicciones para obtener la predicción final
Impulso:
- Ajuste su modelo (por ejemplo, árbol de decisión) a sus datos
- Obtener los residuos
- Ajuste su modelo a los residuos
- Pasa a 2 para N rondas de refuerzo
- 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:
- Tomar N muestras aleatorias del x% de las muestras y del y% de las características
- Ajustar árboles potenciados a cada una de las N muestras
- Predecir con cada N
- 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:
- Adapte un árbol de decisión a sus datos
- 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
- 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.