Un Random Forest (Bosque Aleatorio), es una técnica de aprendizaje automático muy popular. Los Random Forests tienen una capacidad de generalización muy alta para muchos problemas.
Índice
Limitaciones de los Árboles de Decisión
Los árboles de decisión tienen la tendencia de sobre-ajustar (overfit). Esto quiere decir que tienden a aprender muy bien los datos de entrenamiento pero su generalización no es tan buena. Una forma de mejorar la generalización de los árboles de decisión es usar regularización. Para mejorar mucho más la capacidad de generalización de los árboles de decisión, deberemos combinar varios árboles.
¿Qué es un Random Forest?
Un Random Forest es un conjunto (ensemble) de árboles de decisión combinados con bagging. Al usar bagging, lo que en realidad está pasando, es que distintos árboles ven distintas porciones de los datos. Ningún árbol ve todos los datos de entrenamiento. Esto hace que cada árbol se entrene con distintas muestras de datos para un mismo problema. De esta forma, al combinar sus resultados, unos errores se compensan con otros y tenemos una predicción que generaliza mejor.
Diferencia intuitiva entre un árbol de decisión y un random forest
En la siguiente imagen puedes ver la diferencia entre el modelo aprendido por un árbol de decisión y un random forest cuando resuelven el mismo problema de regresión. Este random forest en particular, utiliza 100 árboles.
Como puedes ver, tanto el árbol de decisión como el bosque aleatorio, tienen un error cuadrático medio (MSE) de entrenamiento pequeño y similar. Sin embargo, el error de generalización del random forest es mucho mejor. Esto se puede ver también en que el modelo aprendido es mucho más suave como se puede observar en la figura.
¿Cómo se combinan las predicciones?
Para problemas de clasificación, se suelen combinar los resultados de los árboles de decisión usando soft-voting (voto suave). En el voto suave, se le da más importancia a los resultados en los que los árboles estén muy seguros.
Para problemas de regresión, la forma más habitual de combinar los resultados de los árboles de decisión, es tomando su media aritmética.
Podemos inventar nuestra propia forma de combinar predicciones
También podemos inventarnos nuestra propia forma de combinar los resultados de un bosque aleatorio. Esto es posible porque podemos acceder a las predicciones individuales de cada árbol. Así, podemos hacer el uso de estas predicciones que nos interesen.
Por ejemplo, imagínate que en vez de querer predecir un resultado, queremos predecir el rango de valores probables en el futuro. Podemos obtener los valores mínimo y máximo de cada predicción para definir el intervalo más probable.
Random Forest en scikit-learn: hiper-parámetros más útiles
scikit-learn ofrece dos implementaciones de random forests:
- Para clasificación: RandomForestClassifier
- Para regressión: RandomForestRegressor
Estos son los hiper-parámetros más útiles:
- Propios del Bosque Aleatorio:
- n_estimators: número de árboles que va a tener el bosque aleatorio. Normalmente cuantos más mejor, pero a partir de cierto punto deja de mejorar y sólo hace que vaya más lento. Un buen valor por defecto puede ser el uso de 100 árboles.
- n_jobs: número de cores que se pueden usar para entrenar los árboles. Cada árbol es independiente del resto, así que entrenar un bosque aleatorio es una tarea muy paralelizable. Por defecto sólo utiliza 1 core de la CPU. Para mejorar el rendimiento puedes usar tantos cores como estimes necesario. Si usas n_jobs = -1, estás indicando que quieres usar tantos cores como tenga tu máquina.
- max_features: usa forma de garantizar que los árboles son diferentes, es que todos se entrenan con una muestra aleatoria de los datos. Si queremos que todavía sean más diferentes, podemos hacer que distintos árboles usen distintos atributos. Esto puede ser útil especialmente cuando algunos atributos están relacionados entre sí. Hay varias estrategias para elegir el número máximo de atributos que se pueden usar; mira la documentación para saber más.
- Regularización (también disponibles para Decision Trees):
- max_depth: la profundidad máxima del árbol. En los ejemplos anteriores hemos usado max_depth = 2
- min_samples_split: número mínimo de muestras necesarias antes de dividir este nodo. También se puede expresar en porcentaje.
- min_samples_leaf: número mínimo de muestras que debe haber en un nodo final (hoja). También se puede expresar en porcentaje.
- max_leaf_nodes: número máximo de nodos finales
Resumen
Random Forest es un técnica de aprendizaje automático supervisada basada en árboles de decisión. Su principal ventaja es que obtiene un mejor rendimiento de generalización para un rendimiento durante entrenamiento similar. Esta mejora en la generalización la consigue compensando los errores de las predicciones de los distintos árboles de decisión. Para asegurarnos que los árboles sean distintos, lo que hacemos es que cada uno se entrena con una muestra aleatoria de los datos de entrenamiento. Esta estrategia se denomina bagging.
Dato que un random forest es un conjunto de árboles de decisión, y los árboles son modelos no-paramétricos, los random forests tienen las mismas ventajas y desventajas de los modelos no-paramétricos:
- ventaja: pueden aprender cualquier correspondencia entre datos de entrada y resultado a predecir
- desventaja: no son buenos extrapolando … porque no siguen un modelo conocido
Recursos
- En este [vídeo] explico cómo funcionan los árboles de decisión, bagging y los random forests (en inglés)
- Implementación de Random Forest en scikit-learn para clasificación y regresión: RandomForestClassifier y RandomForestRegressor
- Ventajas y desventajas de los árboles de decisión como modelos no-paramétricos
Créditos Imagen: pixabay