← Volver a Aprende con CDIA

Clasificación: de los modelos a su evaluaciónRandom Forest

IntermedioMachine Learning8 min de lectura

Random Forest

Muchos árboles de decisión diversos que votan: un ensamble por bagging que reduce la varianza y resiste el sobreajuste casi de fábrica.

Un Random Forest (bosque aleatorio) combina muchos árboles de decisión entrenados sobre versiones ligeramente distintas de los datos. Cada árbol vota, y la mayoría gana. La sabiduría de la multitud aplicada al aprendizaje automático.

Primero, un árbol de decisión

Un árbol de decisión clasifica haciendo preguntas sucesivas: ¿la edad es mayor a 30?, ¿el ingreso supera cierto umbral?. Cada pregunta divide los datos hasta llegar a hojas que asignan una clase.

Para elegir la mejor pregunta en cada nodo, el árbol busca la que produce hojas más "puras". Una medida común de impureza es el índice de Gini:

donde es la proporción de la clase en el nodo. Gini vale cuando el nodo contiene una sola clase (pureza total).

El problema: un árbol solo tiende a sobreajustar, memorizando el ruido de los datos.

De un árbol a un bosque

Random Forest resuelve el sobreajuste combinando árboles y añadiendo dos fuentes de azar:

  1. Bagging (bootstrap): cada árbol se entrena sobre una muestra aleatoria con reemplazo del conjunto original. Así ningún árbol ve exactamente los mismos datos.
  2. Subespacio de variables: en cada división, el árbol solo puede elegir entre un subconjunto aleatorio de las variables. Esto descorrelaciona los árboles.

La predicción final agrega los votos de los árboles:

En regresión, en lugar de la moda se promedia.

¿Por qué funciona?

Los errores de árboles individuales, si son suficientemente independientes, tienden a cancelarse al promediarse. El bosque reduce la varianza sin aumentar demasiado el sesgo. Por eso Random Forest suele ser robusto y funcionar bien "de fábrica", con poco ajuste de hiperparámetros.

Un regalo extra: la importancia de variables

Como subproducto, el bosque estima qué tan útil fue cada variable, midiendo cuánto redujo la impureza en promedio a lo largo de todos los árboles. Es una forma sencilla de interpretar el modelo.

En código

scikit-learn esconde todo el bagging y el azar dentro de una sola clase:

from sklearn.ensemble import RandomForestClassifier

# n_estimators = cuántos árboles forman el bosque.
modelo = RandomForestClassifier(n_estimators=300, random_state=0).fit(X_train, y_train)

modelo.predict(X_test)
print(modelo.feature_importances_)  # importancia de cada variable (suma 1)

Con n_estimators más alto el bosque es más estable pero más lento; a diferencia del boosting, agregar árboles no provoca sobreajuste.

Para llevar

Random Forest es un ensamble por promediado (bagging): muchos árboles diversos que votan. Reduce la varianza, resiste el sobreajuste y ofrece importancia de variables casi gratis. En la próxima lección veremos una filosofía opuesta de ensamble —el boosting— con XGBoost.