¿Estimación de error fuera de bolsa para aumentar?

9

En Random Forest, cada árbol se cultiva en paralelo en una muestra boostrap única de los datos. Debido a que se espera que cada muestra de boostrap contenga aproximadamente el 63% de las observaciones únicas, esto deja aproximadamente el 37% de las observaciones, que se pueden usar para probar el árbol.

Ahora, parece que en Stochastic Gradient Boosting, también hay una similar a la de RF:OOsimirror

Si bag.fraction está configurado para ser mayor que 0 (se recomienda 0.5), gbm calcula una estimación fuera de bolsa de la mejora en el rendimiento predictivo. Evalúa la reducción de la desviación en aquellas observaciones que no se utilizan para seleccionar el siguiente árbol de regresión.

Fuente: Ridgeway (2007) , sección 3.3 (página 8).

Tengo problemas para entender cómo funciona / es válido. Digamos que estoy agregando un árbol en la secuencia. Estoy haciendo crecer este árbol en una submuestra aleatoria del conjunto de datos original. Podría probar este único árbol en las observaciones que no se utilizaron para cultivarlo. Convenido. PERO , dado que Boosting es secuencial, estoy usando la secuencia completa de árboles construidos hasta ahora para proporcionar una predicción para esas observaciones omitidas. Y, existe una alta probabilidad de que muchos de los árboles anteriores ya hayan visto estas observaciones. Entonces, el modelo no se está probando realmente en cada ronda en observaciones invisibles como con RF, ¿verdad?

Entonces, ¿cómo es que esto se llama estimación de error "fuera de bolsa"? Para mí, ¿no parece estar "fuera" de ninguna bolsa ya que las observaciones ya se han visto?

Antoine
fuente
1
Vea la discusión aquí github.com/scikit-learn/scikit-learn/pull/1806 . No está solo al expresar sus preocupaciones sobre la forma en que se calculan las estimaciones OOB.
mpiktas
gracias por el enlace, pero desafortunadamente todos los contribuyentes de hilos parecen estar tan perdidos como yo.
Antoine
1
En realidad no. Ver github.com/scikit-learn/scikit-learn/pull/2188 . En este compromiso, la puntuación OOB se cambia a mejora OOB de la forma en que lo hace gbm. No sé cómo funciona esta idea con precisión, pero de lo que obtuve, la muestra oob para el árbol actual se utiliza para calcular la mejora de OOB. No pude encontrar las fórmulas matemáticas, por lo que es necesario profundizar en el código gbm para ver con qué precisión se calcula esta mejora.
mpiktas
@Antoine ¡Pregunta realmente emocionante! ¿Se encontró una respuesta definitiva?
Soren Havelund Welling
1
No, desafortunadamente. Los enlaces anteriores (en los comentarios), este hilo y este otro hilo dan algunos consejos . Esto me está volviendo completamente loco. Algún día alguien debería enviar un correo electrónico al Dr. Friedman / Hastie ... Gracias por su atención.
Antoine

Respuestas:

2

Responde solo parcialmente (y agrega una nueva pregunta a su pregunta).

La implementación de gbm en R http://www.rdocumentation.org/packages/gbm/functions/gbm tiene dos parámetros para ajustar algunos de los que están fuera de la bolsa.

a) train.fractiondefinirá una proporción de los datos que se utilizan para entrenar a todos los árboles y, por lo tanto, 1- train.fractionserán datos verdaderos OOB (fuera de bolsa).

b) bag.fractiondefinirá la proporción de datos de entrenamiento que se utilizarán en la creación del próximo árbol en el impulso. Por lo tanto, puede haber algunos datos que nunca se usan para la creación de ningún árbol y se pueden usar realmente como datos OOB (pero es poco probable, consulte la pregunta a continuación)

0,37nortetrmimisnortetrmimierr.rateconfusion

No sé cómo responder eso (y le agradezco (+1) por hacer la pregunta y hacerme dar cuenta de que no entiendo este aspecto de los bosques al azar). La posible solución es que solo hay un arranque, y todos los árboles están construidos a partir de él, pero que yo sepa, ese no es el caso.

Jacques Wainer
fuente
Para RF / Bagging, no hay problema: en cualquier paso dado en el proceso de construcción del conjunto, cualquier observación en el conjunto de datos original se puede alimentar a todos los árboles que fueron entrenados en muestras de boostrap sin esta observación. Aproximadamente un tercio (~ 37%) del número total de árboles cumplirá esta condición. Además, al permitir que estos árboles voten y tomar la clase más popular, se puede obtener una predicción para la observación. El número de veces que la predicción difiere de la etiqueta real de la observación promediada en todas las clases, da la estimación de error fuera de la bolsa
Antoine
1
Además, parece que lo que le da a la capacidad de estimación de error OOB en Boosting no proviene del train.fractionparámetro (que es solo una característica de la función gbm pero no está presente en el algoritmo original), sino realmente del hecho de que solo una submuestra del los datos se usan para entrenar cada árbol en la secuencia, dejando fuera las observaciones (que se pueden usar para las pruebas) Lo que se remonta a mi pregunta original. ¿Cómo pueden usarse estas observaciones para las pruebas, ya que probablemente hayan sido vistas muchas veces por muchos árboles anteriores en la secuencia?
Antoine
olvidé mencionar que cada árbol en RF está construido a partir de su propia muestra de bootstrap única de los datos originales
Antoine
@ user2835597 gracias por sus explicaciones sobre RF. Por lo tanto, un error OOB de una RF realmente está evaluando solo 1/3 de los árboles en el bosque (eso no me parece muy útil). Bueno, aprender algo todos los días.
Jacques Wainer
De todos modos, el parámetro train.fraction parece ser la respuesta a su pregunta. La implementación de sklearn también tiene un parámetro similar, la submuestra (ver scikit-learn.org/stable/modules/generated/…
Jacques Wainer
-2

Creo que lo hacen fuera de bolsa en cada paso. Como se agregan los resultados de todos los pasos (con coeficientes), los errores OOB también se pueden agregar con los mismos coeficientes.

usuario2225548
fuente