Optimización de hiperparámetros
Clase 31 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Clase 31 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Diego Martinez
Estefanía David Rodríguez
Sandra Liliana Delgado Gómez
Usuario anónimo
Jhon Raul Perez Muñoz
Luis Daniel Castellanos Remolina
Wilson Fernando Antury Torres
Usuario anónimo
Usuario anónimo
Cristian Orozco Benjumea
Darvin Orozco
Gustavo Adolfo Abello Fernandez
Isaac Nahaniel Silva Urbina
Cristian Orozco Benjumea
Hector F
Usuario anónimo
Carlos Alberto Tapia Agámez
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Nicoll Idaly Angulo Mejia
johan Stever Rodriguez Molina
johan Stever Rodriguez Molina
Luis Eduardo Chacón Wilches
Usuario anónimo
Yamid Leonardo Rodriguez Reyes
Jimmy Buriticá Londoño
Wilson Fernando Antury Torres
Este atributo no me sirviò:
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_
En cambio si me sirviò:
list(zip(gsearch1.cv_results_['mean_test_score'], gsearch1.cv_results_['std_test_score'], gsearch1.cv_results_['params']))
Gracias por tu aporte. A mi tampoco me daba esa línea y ya si puedo visualizarla con el cambio que agregaste.
Gracias.
diego muchas gracias
Con este código también se puede visualizar los resultados y valore de parámetros, tal como los visualiza el instructor:
list(zip(gsearch1.cv_results_['mean_test_score'], gsearch1.cv_results_['std_test_score'], gsearch1.cv_results_['params'])), gsearch1.best_params_, gsearch1.best_score_
La imagen a continuación presenta los resultados visualizados al ejecutar el código:
Excelente aporte
gracias:)
Para los que estamos trabajando en colab la información gsearch1.grid_scores_ ya no está disponible, yo use: gsearch1.cv_results_['mean_test_score'], gsearch1.best_params_, gsearch1.best_score_
En mi caso corregi un error que tenia que ver con el:
score_train
Este aparece deshabilitado para corregirlo lo envié como parámetro habilitado en la instrucción:
gsearch1 = GridSearchCV(estimator, param_grid = param_test1, scoring='r2', cv=5, return_train_score = True)
Con el parámetro como se muestra a continuación:
return_train_score = True
En esta otra instrucción hice lo mismo:
final_results = cross_validate(gsearch1.best_estimator_,X_train,y_train,return_train_score = True)
De esta forma corregí el error que se generaba con el parámetro score_train.
funcionan todos completa tu corrección
Los Gradient Boosting Grid son difíciles de optimizar, algunos Kaggle proponen lo siguiente para lograrlo:
GridSearch busca el mejor valor para la cantidad de estimadores.Muy buen resumen, excelente! Muchas gracias Cristian
Como dice en el ejemplo el atributo grid_scores_ fue obsoleto en favor de cv_results_ Para la línea:
gsearch1.cv_results_, gsearch1.best_params_, gsearch1.best_score_
muchas gracias por el aporte
El atributo grid_scores_ ya no existe. Lo que me funcionó para encontrar los valores mostrados en el video fue:
list(zip(gsearch1.cv_results_['mean_test_score'], gsearch1.cv_results_['std_test_score'], gsearch1.cv_results_['params']))
Comaparto el código completo de Optimización de Hiperparámetros trabajado en esta sesión de clase:
# Optimización de hiperparámetros from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=1) from sklearn.model_selection import GridSearchCV param_test1 = {'n_estimators':range(20,501,20)} list(param_test1['n_estimators']) estimator = GradientBoostingRegressor(learning_rate=0.1, min_samples_split=500, min_samples_leaf=50, max_depth=8, max_features='sqrt', subsample=0.8, random_state=10) gsearch1 = GridSearchCV(estimator, param_grid = param_test1, scoring='r2', cv=5, return_train_score = True) gsearch1.fit(X_train,y_train) gsearch1.cv_results_, gsearch1.best_params_, gsearch1.best_score_ gsearch1.best_estimator_ final_results = cross_validate(gsearch1.best_estimator_,X_train,y_train,return_train_score = True) test_scores = final_results['test_score'] train_scores = final_results['train_score'] print(np.mean(train_scores)) print(np.mean(test_scores)) estimator = GradientBoostingRegressor(learning_rate=0.1, min_samples_split=500, min_samples_leaf=50, max_depth=8, max_features='sqrt', subsample=0.8, random_state=10, n_estimators = 240) estimator.fit(X_train,y_train) estimator.score(X_test,y_test)
Otro cambio que hice es agregar la visualización de todos los parámetros así:
gsearch1.cv_results_, gsearch1.best_params_, gsearch1.best_score_
Excelente aporte
Deben cortar en la grabación la primera parte ya que no esta mostrando el mapa conceptual, luego es lo mismo pero mostrando el mapa conceptual hasta el minuto 3:20
Super, pensé que nunca íbamos a llegar a la solución con este problema.
Para conocer los parametros y atributos para el Grid Search:
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
con este codigo se muestra todo lo del profeson con el resultado de los mejores parametros y el mejor score
list(zip(gsearch1.cv_results_['mean_test_score'], gsearch1.cv_results_['std_test_score'], gsearch1.cv_results_['params'])), gsearch1.best_params_, gsearch1.best_score_```
Estoy viendo el curso por segunda vez, y es verdad que eres Pro!. Mejor explicado no podría ser, muchas gracias
hay otros métodos más sofisticados para hacer este proceso de hyper parameter tunning distintos a usar random search y grid search, uno de ellos que uso bastante es el de bayesian optimization, les recomiendo investigar sobre el tema.
Sin embargo, una desventaja del gridsearch es que es exhaustivo y por lo tanto al probar todas las posibilidades es computacionalmente bastante costoso, hay mejores métodos alternos a este.
Que mejores métodos existen?
En resumen se tiene que los Gradient Boosting Grid son complejos de optimizar, aunque algunos Kaggle proporcionan la siguiente receta para lograr esto:
Para los que trabajan en Colab, en el paso 26 deben poner
final_results = cross_validate(gsearch1.best_estimator_,X_train,y_train,return_train_score=True)
Conclusiones: train_test_split se usa para evaluaciones rápidas, testeos y prototipaje. cross_validate es un método más robusto para poder estimar el rendimiento de tu algoritmo