Ajustement des hyperparamètres en Python
Alex Scriven
Data Scientist
Analysons les sorties de GridSearchCV.
Trois groupes pour les propriétés de GridSearchCV :
cv_results_best_index_, best_params_ et best_score_scorer_, n_splits_ et refit_time_
On accède aux propriétés avec la notation par points.
Par exemple :
grid_search_object.property
Où property est la propriété à récupérer
La propriété cv_results_ :
Lisez-la dans un DataFrame pour l'afficher et l'analyser :
cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)
print(cv_results_df.shape)
(12, 23)
Les colonnes time indiquent le temps d'ajustement (et d'évaluation) du modèle.
Souvenez-vous du couplage à 5 plis : exécution 5 fois, avec la moyenne et l'écart type des temps en secondes.

Les colonnes param_ stockent, pour chaque rangée, les paramètres testés, une colonne par paramètre.

La colonne params contient le dictionnaire de tous les paramètres :
pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

Les colonnes test_score contiennent les scores sur l'ensemble de test pour chaque pli, ainsi que des statistiques sommaires :

La colonne de rang ordonne mean_test_score du meilleur au pire :

On peut repérer facilement la meilleure case de la grille dans cv_results_ avec la colonne rank_test_score
best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

Les colonnes test_score sont ensuite répétées pour les training_scores.
Points importants à retenir :
return_train_score doit être à True pour inclure les colonnes d'entraînement.
Il n'y a pas de colonne de rang pour l'entraînement, car seule la performance sur l'ensemble de test compte
L'information sur la meilleure case de la grille est résumée dans ces trois propriétés :
best_params_, le dictionnaire des paramètres ayant donné le meilleur score.
best_score_, le meilleur score obtenu.
best_index_, la rangée de cv_results_.rank_test_score correspondant au meilleur.
La propriété best_estimator_ est un estimateur construit avec les meilleurs paramètres de la recherche sur grille.
Ici, c'est un estimateur Random Forest :
type(grid_rf_class.best_estimator_)
sklearn.ensemble.forest.RandomForestClassifier
Vous pouvez aussi utiliser directement cet objet comme estimateur.
print(grid_rf_class.best_estimator_)

Des informations supplémentaires sont offertes par ces propriétés :
scorer_La fonction d'évaluation utilisée sur les données de validation. (nous avons choisi AUC)
n_splits_Nombre de divisions de validation croisée. (réglé à 5)
refit_time_Nombre de secondes pour réajuster le meilleur modèle sur tout l'ensemble de données.
Ajustement des hyperparamètres en Python