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 randomForest
paquete y he aceptado los valores predeterminados para todos los parámetros.
Respuestas:
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.k k∈{5,10}
fuente
¿Cómo está obteniendo ese AUC del 99% en sus datos de entrenamiento? Tenga en cuenta que hay una diferencia entre
y
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.
fuente
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
randomForest
mucho, pero que yo sepa, hay varios parámetros que puede usar para ajustar sus bosques:nodesize
- tamaño mínimo de nodos terminalesmaxnodes
- número máximo de nodos terminalesmtry
- número de variables utilizadas para construir cada árbol (gracias @ user777)fuente
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.Es posible que desee utilizar métodos de validación cruzada, como la validación cruzada K fold.
fuente
puedes ajustar tus parámetros usando gridsearch
fuente
GridSearchCV
se llame al módulomodel_selection
, y por lo tanto, la segunda línea de código debería serfrom sklearn.model_selection import GridSearchCV
.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.
fuente