En este artículo veremos un ejemplo de bagging y random forest.
Los parámetros libres de bagging y random forest son dos:
- Número de árboles construidos: aquí hemos de aseguramos de que la función de coste es estable para el número de árboles elegido
- Complejidad de los mismos (normalmente max depth o min samples leaf). Si queremos controlar la complejidad con dos parámetros, serían tres parámetros.
Como mínimo, entonces, tenemos que iterar sobre el número de árboles y sobre la complejidad.
Bagging y random forest
Para entender mejor nuestro ejercicio de bagging y random forest, desglosemos un poco cada uno de estos dos conceptos.
Por un lado, el bagging consiste en reducir la varianza de los árboles de decisión. Este método lo que hace es variar el conjunto de datos de entrenamiento por medio de diferentes learners .
A diferencia de un solo modelo entrenado en todo el conjunto de datos, el bagging lo que hace es crear múltiples weak learners o modelos básicos de entrenamiento en un subconjunto de datos original. Estos subconjuntos serán utilizados para entrenar los modelos débiles y se generarán mediante un muestreo aleatorio.
Por otro lado, el random forest es un algoritmo de aprendizaje automático supervisado que se usa también en problemas de clasificación y regresión. Lo que hace es construir árboles de decisión en diferentes muestras y, a partir del voto mayoritario de cada uno de ellos, realiza la clasificación y el promedio, en caso de que sea una regresión.
El random forest tiene la capacidad de albergar datasets con variables continuas, como en el caso de la regresión, y variables categóricas, como en el caso de la regresión.
Ejercicio sobre bagging y random forest
Aquí lo que vamos a hacer para que sea más fácil nuestro ejercicio es realizar un barrido solo sobre una variable. Luego fijaremos el número de árboles en 200 e iteramos solo sobre la profundidad de los árboles.
#Bagging y Random forest
from sklearn.ensemble import RandonForestClassifier
#grid search
maxDepth = range (1, 15)
tuned_parameters = {'max_depth' : maxdepth)
grid = GridSearchCV (RandomForestClassifier (randon_state, n_estimators = 200, max_features = 'sqrt'), param_grid = tuned_parameterss, cv = 10)
grid.fit (X_train, y_train)
print ("best mean cross-validation score: {: . 3f}.format (grid.best_score)
print ("best parameters: {}.format (grid.best_params))
scores = np.array (grid.cv_results_[mean_test_score'])
plt.plot (maxDepth, scores, '-o')
plt.xlabel ('max_depth')
plt.ylabel ('10 - fold ACC')
plt.show ()
Ejecutamos y miramos qué pasa.
Los barridos sobre dos variables, además de ser más largos, requieren que se tenga cuidado con ellos, ya que hay que pintarlos. Hasta el momento lo que hemos visto son gráficas para barridos sobre una única variable. Si le metemos un param grid de dos parámetros, probablemente la gráfica reviente en algún punto.
Nos dice que el max depth óptimo es 9. Creeríamos que con 2 está bien, incluso con 4, pero de ahí hacia delante es cierto que la curva es más pronunciada, aunque no es claramente incorrecta.
Es decir, podríamos dejar el max depth hasta 9, pero no es una solución óptima, ya que llevaría más tiempo de ejecución y recursos.
Así pues, en vez de dejar la profundidad en lo que nos sugiere el algoritmo, vamos a dejarla en 2:
#Bagging y Random forest
#maxDepthOptimo = grid.best_params_ ['max_depth']
maxDepth = 2
bagModel = RandomForestClassifier (max_depth = maxDepthOptimo, n_estimators = 200, max_features = 'sqrt').fit (X_train, y_train)
print ("Train: ", bagModel.score (X_train, y_train))
print ("Test: ", bagModel.score (X_test, y_test))
Train: 0.9648351648351648
Test: 0.9649122007017544
En comparación con el árbol, queda exactamente igual o, al menos, prácticamente igual. Esto es lo que pasa cuando tenemos conjuntos de datos muy pequeños.
¿Qué sigue?
Ahora que has visto cómo funcionan el bagging y random forest, puedes seguir aprendiendo gracias al Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que adquirirás todos los conocimientos necesarios para incursionar en el mundo del Big Data, una de las disciplinas con el mejor mercado laboral de la actualidad. ¡No esperes más para cambiar tu futuro y solicita información ahora!