Ejemplo de bagging

Autor: | Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 2 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo veremos un ejemplo de bagging con BaggingRegressor. Lo que haremos será entrenar un algoritmo de bagging y devolver las prestaciones para el conjunto de test.

Recordemos que el bagging es un método que consiste en reducir la varianza de los árboles de decisión, que, en función de la división de los resultados, pueden ser muy distintos.

Ejemplo de bagging

Observemos el siguiente código:

#Ejemplo de bagging
from sklearn.ensemble import BaggingRegressor

maxDepth = range (1, 10)
#param_grid = {'max_depth': maxDepth} --> esto falla
param_grid = {'base_estimator__max_depth' : maxDepth}
grid = GridSearchCV (BaggingRegressor (base_estimator = DecisionTreeRegressor (), n_estimators = 200, random_state = 0), param_grid = param_brid, cv = 3, verbose = 2)
grid.fit (X_train, y_train)
print ("best mean cross - validation score: {: . 3f}".format (grid.best_score))
print ("best parameters: { }".format (grid.best_params))

#Ejemplo de bagging
scores = np.array (grid.cv_results_ ['mean_test_score'])
plt.plot (maxDepth, scores, ' -o ')
plt.xlabel ('max_depth', fontsize = 16)
plt.ylabel ('10-Fold MSE')
#plt.ylim (-1, 0)
plt.show
Ejemplo de bagging
Ejemplo de bagging

Lo que vemos es que la subida de la curva va siendo cada vez menor, así que podríamos cortar más o menos en 6.

En el param_grid se tiene que pasar una cadena de texto con el nombre del parámetro. Pero esto va a fallar, porque el BaggingRegressor no tiene max_depth; entonces, para acceder a los parámetros de lo que dentro de BaggingRegressor se denomina base_estimator, que internamente son métodos privados, hay que hacerlo de este modo: param_grid = {‘base_estimator__max_depth’ : maxDepth}.

Esto va a funcionar porque nuestro base estimator es un árbol de decisión, por lo que sabemos que, en este caso, tenemos max_depth. La forma de llamarlo únicamente dentro de bagging es la que ya hemos mencionado.

#Ejemplo de bagging
maxDepthOptimo = 6
br = Bagging]Regressor (max_depth = maxDepthOptimo).fit (X_train, y_train)

print ("Train: ", rf.score (X_train, y_train))
print ("Test: ", rf.score (X_test, y_test))
Ejemplo de bagging
#Ejemplo de bagging
importances = np.mean ([tree.feature_importances_ for tree in br.estimators_], axis = 0)
importances = importances / np.max (importances)

indices = np.argsort (importances) [ : : - 1]

plt.figure (figsize = (10, 10))
plt.barh (range (X_train.shape [1]), importances [indices])
plt.yticks (range (X_train.shape [1]), feature_names [indices])
plt.show ()
Ejemplo de bagging

Como el BaggingRegressor no necesariamente funciona con árboles, sino que funciona con cualquier modelo que nosotros queramos, este no tiene implementado un método que calcule las feature importances. No lo tiene implementado porque no va a usarlo necesariamente, ya que no tenemos por qué disponer de un modelo dentro que permita usar feature importances. Entonces, como esto no está claro, no existe esta opción.

No obstante, en el caso de que nuestro modelo interno permita usar feature importances, lo que nos permite es acceder a cada una de las cosas que hay dentro del bagging. Es por eso que, en este caso, estimators_ se usa para ver la lista de estimators.

¿Qué sigue?

Si quieres seguir aprendiendo más sobre Big Data, una de las disciplinas más importantes en la actualidad, te invitamos a seguir el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva de 8 meses de duración en la que adquirirás todas las herramientas teóricas y prácticas para seguir cumpliendo tus objetivos de ser un exitoso data scientist. Además, tendrás a los mejores profesionales acompañándote en todo momento y guiando tu camino hacia tus metas. ¡No le des más vueltas y solicita más información ahora!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado