Hay muchas publicaciones de blog, videos de YouTube, etc. sobre las ideas de embolsar o impulsar árboles. Mi comprensión general es que el pseudocódigo para cada uno es:
Harpillera:
- Tome N muestras aleatorias de x% de las muestras y y% de las características
- Ajuste su modelo (p. Ej., Árbol de decisión) en cada uno de N
- Predecir con cada N
- Promedio de las predicciones para obtener la predicción final
Impulso:
- Ajuste su modelo (p. Ej., Árbol de decisión) a sus datos
- Obtener los residuos
- Ajuste su modelo a los residuos
- Ir a 2 para N rondas de refuerzo
- La predicción final es una suma ponderada de los predictores secuenciales.
Tomaré cualquier aclaración a mi entender más arriba, pero mi pregunta prevista es la siguiente:
Tanto XGBoost como LightGBM tienen parámetros que permiten el ensacado. La aplicación no es Bagging OR Boosting (que es de lo que habla cada publicación de blog), sino Bagging AND Boosting. ¿Cuál es el pseudocódigo para dónde y cuándo se produce el embolsado y el refuerzo combinados?
Esperaba que fuera "Árboles impulsados embolsados", pero parece que es "Árboles embolsados impulsados". La diferencia parece sustancial.
Árboles impulsados en bolsas:
- Tome N muestras aleatorias de x% de las muestras y y% de las características
- Ajustar árboles potenciados en cada una de las N muestras
- Predecir con cada N
- Promedio de las predicciones para obtener la predicción final
Esta parece ser la mejor manera de hacerlo. Después de todo, el riesgo de aumentar es el sobreajuste y el beneficio principal del embolsado es reducir el sobreajuste; Empacar un montón de modelos potenciados parece una gran idea.
Sin embargo, al mirar, por ejemplo, el scikit-learn
gradient_boosting.py (que hace una muestra de bolsas, pero no una selección aleatoria de características), y juntar algunas pequeñas pepitas en las publicaciones sobre LightGBM y XGBoost, parece que XGBoost y LightGBM funcionan de la siguiente manera:
Árboles en bolsas impulsados:
- Ajuste un árbol de decisión a sus datos
- Para i en N rondas de refuerzo:
- Obtener los residuos
- si modifico bag_frequency == 0 (es decir, saco cada 5 rondas):
- Tome una sola muestra aleatoria de x% de las muestras y y% de las características; usa esta muestra aleatoria en el futuro
- ajustar el árbol a los residuos
- La predicción final es una suma ponderada de los predictores secuenciales.
Corrija mi comprensión aquí y complete los detalles. El árbol embolsado reforzado (con solo 1 árbol aleatorio por frecuencia de bolsa) no parece tan poderoso como el árbol reforzado embolsado.
Respuestas:
Las instancias se submuestrean repetidamente en Bagging , pero no en Características. ( RandomForests , XGBoost y CatBoost hacen ambas cosas):
Incluya un paso de inicialización en su pseudocódigo de refuerzo para eliminar la redundancia:
Bagged Boosted Trees (como usted lo llama) es ciertamente un enfoque razonable, pero diferente de XGBoost o CatBoost :
XGBoost y CatBoost se basan en Boosting y utilizan todos los datos de entrenamiento. También implementan el embolsado submuestreando una vez en cada iteración de refuerzo:
Si desea apegarse a "ajustar el modelo a los residuos", esto sería equivalente a "ajustar el modelo a los residuales de los datos en la muestra de arranque ".
Observaciones adicionales :
No hay una " mejor manera de hacerlo " como sugiere (no hay un teorema del almuerzo gratis). Los "árboles potenciados en bolsas" podrían superar a XGBoost en ciertos conjuntos de datos.
Esta línea es confusa. ¿De dónde sacaste esto?
Esto no debe mencionarse en su pseudocódigo. Especialmente cuando quedan otros parámetros más importantes (como la tasa de aprendizaje para aumentar).
fuente