Gradient Boosting Tree: "cuanto más variable, mejor"?

10

Del tutorial de XGBoost, creo que cuando crece cada árbol, se escanean todas las variables para seleccionarlas para dividir los nodos, y se elegirá la que tenga la división de ganancia máxima. Entonces, mi pregunta es: ¿qué sucede si agrego algunas variables de ruido en el conjunto de datos, estas variables de ruido influirían en la selección de variables (para cada árbol en crecimiento)? Mi lógica es que debido a que estas variables de ruido NO dan una división de ganancia máxima, entonces nunca se seleccionarían, por lo que no influyen en el crecimiento del árbol.

Si la respuesta es sí, ¿es cierto que "cuantas más variables, mejor para XGBoost"? No consideremos el tiempo de entrenamiento.

Además, si la respuesta es sí, entonces es cierto que "no necesitamos filtrar variables no importantes del modelo".

¡Gracias!

WCMC
fuente

Respuestas:

10

Mi lógica es que debido a que estas variables de ruido NO dan una división de ganancia máxima, entonces nunca se seleccionarían, por lo que no influyen en el crecimiento del árbol.

Esto solo es perfectamente correcto para conjuntos de datos muy grandes, casi infinitos, donde el número de muestras en su conjunto de entrenamiento ofrece una buena cobertura de todas las variaciones. En la práctica, con suficientes dimensiones terminas con mucho ruido de muestreo, porque tu cobertura de posibles ejemplos es más débil cuanto más dimensiones tengan tus datos.

El ruido en las variables débiles que termina por correlacionarse por casualidad con la variable objetivo puede limitar la efectividad de los algoritmos de refuerzo, y esto puede suceder más fácilmente en divisiones más profundas en el árbol de decisión, donde los datos que se evalúan ya se han agrupado en un pequeño subconjunto.

Cuantas más variables agregue, es más probable que obtenga variables débilmente correlacionadas que se vean bien con el algoritmo de selección dividida para alguna combinación específica, que luego crea árboles que aprenden este ruido en lugar de la señal deseada, y finalmente generalizar mal.

En la práctica, he encontrado que XGBoost es bastante robusto al ruido a pequeña escala. Sin embargo, también descubrí que a veces seleccionará variables de ingeniería de baja calidad, en lugar de datos mejor correlacionados, por razones similares. Por lo tanto, no es un algoritmo en el que "cuantas más variables, mejor para XGBoost" y deba preocuparse por posibles características de baja calidad.

Neil Slater
fuente
muy agradable. ¡Gracias! Entonces, ¿cree que la selección de funciones antes de instalar XGBoost es necesaria en función de su experiencia?
WCMC
@ Frank: Quizás. También puede comenzar con un conjunto completo de características y utilizar el informe de importancia variable xgboost para ayudarlo. Sin embargo, en general, XGBoost no lo salva por completo de ninguna de las preocupaciones habituales sobre la selección de funciones y la ingeniería.
Neil Slater
Hola @Neil, echa un vistazo a datascience.stackexchange.com/questions/17288/... cada vez que tengas la oportunidad. Gracias.
WCMC
@ Frank: ya lo hice ayer y dejé una pregunta para aclarar porque los números parecían un poco fuera de lugar.
Neil Slater
Hola @Neil, como el póster anterior no respondió a tu pregunta, lo volví a publicar aquí con mi propio proyecto. También proporcioné el conjunto de datos y el script R allí, que espero sea más conveniente para que otros entiendan el problema. Le agradezco si le gustaría brindar algo de ayuda.
WCMC