Bosque aleatorio: cómo manejar el sobreajuste

41

Tengo experiencia en informática pero estoy tratando de enseñarme ciencia de datos resolviendo problemas en Internet.

He estado trabajando en este problema durante las últimas semanas (aproximadamente 900 filas y 10 funciones). Inicialmente estaba usando regresión logística pero ahora me he cambiado a bosques aleatorios. Cuando ejecuto mi modelo de bosque aleatorio en mis datos de entrenamiento obtengo valores realmente altos para auc (> 99%). Sin embargo, cuando ejecuto el mismo modelo en los datos de la prueba, los resultados no son tan buenos (precisión de aproximadamente el 77%). Esto me lleva a creer que estoy sobre ajustando los datos de entrenamiento.

¿Cuáles son las mejores prácticas para prevenir la sobreadaptación en bosques aleatorios?

Estoy usando r y rstudio como mi entorno de desarrollo. Estoy usando el randomForestpaquete y he aceptado los valores predeterminados para todos los parámetros.

Abhi
fuente
44
Breiman afirma que RF no se sobreajusta. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Suponiendo que él es correcto, ¿tal vez hay algún tipo de inconsistencia entre su entrenamiento y el conjunto de pruebas?
Sycorax dice Reinstate Monica
RF evita el sobreajuste a los DATOS DE PRUEBA si optimiza el parámetro de ajuste
Brash Equilibrium
Encuentro que sampsize es un parámetro de ajuste completamente ignorado. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Respuestas:

30

Para evitar un ajuste excesivo en un bosque aleatorio, lo principal que debe hacer es optimizar un parámetro de ajuste que rija la cantidad de características que se eligen aleatoriamente para hacer crecer cada árbol a partir de los datos de arranque. Por lo general, hace esto a través de la validación cruzada de -pliegues, donde , y elige el parámetro de ajuste que minimiza el error de predicción de la muestra de prueba. Además, cultivar un bosque más grande mejorará la precisión predictiva, aunque generalmente hay rendimientos decrecientes una vez que se obtienen varios cientos de árboles.kk{5,10}

Equilibrio impetuoso
fuente
1
Gracias. ¿Hay algún tutorial que muestre cómo optimizar estos parámetros?
Abhi
Deberá registrarse en los cursos en línea de Stanford, lo cual es bastante simple, pero aquí hay un video tutorial para hacerlo en R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium
Si entiendo esto correctamente, usamos la validación cruzada para determinar el número de características que entran en el modelo de bosque aleatorio en lugar del número de características que el modelo probará en cada paso. Correcto?
Abhi
44
Argumentaría en contra de esta respuesta: dos de las características atractivas de los RF son que es difícil sobreajustarlos y los parámetros predeterminados suelen ser bastante buenos. Esta respuesta parece implicar que los RF son sensibles a los valores predeterminados, lo cual rara vez es el caso
charles
77
Empíricamente, no me ha resultado difícil adaptar el bosque aleatorio, el bosque aleatorio guiado, el bosque aleatorio regularizado o el bosque aleatorio regularizado guiado. Regularmente se desempeñan muy bien en la validación cruzada, pero mal cuando se usan con nuevos datos debido a un ajuste excesivo. Creo que tiene que ver con el tipo de fenómenos que se modelan. No es un gran problema al modelar un proceso mecánico, pero con algo como un modelo de comportamiento obtengo resultados mucho más estables con una regresión bien especificada.
Hack-R
33

¿Cómo está obteniendo ese AUC del 99% en sus datos de entrenamiento? Tenga en cuenta que hay una diferencia entre

predict(model)

y

predict(model, newdata=train)

al obtener predicciones para el conjunto de datos de entrenamiento. La primera opción permite recoger fuera de la bolsa de las predicciones de la selva al azar. En general, esto es lo que desea cuando compara los valores pronosticados con los reales en los datos de entrenamiento.

El segundo trata los datos de entrenamiento como si se tratara de un nuevo conjunto de datos y ejecuta las observaciones en cada árbol. Esto dará como resultado una correlación artificialmente estrecha entre las predicciones y los datos reales, ya que el algoritmo de RF generalmente no poda los árboles individuales, sino que depende del conjunto de árboles para controlar el sobreajuste. Por lo tanto, no haga esto si desea obtener predicciones sobre los datos de entrenamiento.

Hong Ooi
fuente
3
Estaba usando predic (modelo, datos = tren). Ahora he cambiado para predecir (modelo) y mi auc se ha reducido al 87%. ¿Es algo bueno o algo malo?
Abhi
2
¡Gracias! Descubrí que este también era el problema para mí. Publiqué una pregunta de seguimiento sobre qué medida usar como "error de entrenamiento" para los modelos RF aquí: stats.stackexchange.com/questions/162353/…
Berk U.
Genial, gracias !! ¡También estaba cometiendo este error! Para @Abhi: es algo bueno, porque el AUC anterior era absurdamente alto. Este es más realista. Pruebe la validación cruzada y mida el AUC en eso y probablemente verá un valor similar.
Curioso
7

Para los árboles de decisión hay dos formas de manejar el sobreajuste: (a) no crezca los árboles en su totalidad (b) pode

Lo mismo se aplica a un bosque de árboles: no los cultive demasiado y pode.

No uso randomForestmucho, pero que yo sepa, hay varios parámetros que puede usar para ajustar sus bosques:

  • nodesize - tamaño mínimo de nodos terminales
  • maxnodes - número máximo de nodos terminales
  • mtry - número de variables utilizadas para construir cada árbol (gracias @ user777)
Alexey Grigorev
fuente
1
Y mtry, el número de variables que dibuja el algoritmo para construir cada árbol, por defecto la raíz cuadrada del número total de características.
Sycorax dice Reinstate Monica
Dejaría maxnodes y sampsize más bajo en su lugar. Tanto los maxnodes decrecientes como el tamaño de sampios dan árboles con menos profundidad y un bosque más robusto, también de tamaño más pequeño, aunque también con una correlación más baja, y es probable que el bosque converja a un error de predicción de validación cruzada más bajo, consulte stackoverflow.com/questions/34997134/…
Soren Havelund Welling
2

Es posible que desee utilizar métodos de validación cruzada, como la validación cruzada K fold.

Fre
fuente
necesita normalizar / escalar las características?
charles
44
@charles mis disculpas. De hecho, no es necesario escalar las características al usar bosques aleatorios. Ver: stackoverflow.com/questions/8961586/…
Fre
Creo que la validación cruzada sería útil. Se trata de un relativamente pequeño conjunto de datos con validación de muestras separadas producir potencialmente inestables estimaciones de error (aunque es cierto que tengo la sensación de esto no es la cuestión aquí)
Charles
1

puedes ajustar tus parámetros usando gridsearch

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)
Aman Bassi
fuente
Un intento de editor sugiere que GridSearchCVse llame al módulo model_selection, y por lo tanto, la segunda línea de código debería ser from sklearn.model_selection import GridSearchCV.
gung - Restablece a Monica
0

Intente ajustar el parámetro max_depth en rangos de [5, 15] pero no más que esto porque si toma una gran profundidad, hay una alta probabilidad de sobreajuste.

Naveen Chelimilla
fuente