Optimiser les hyperparamètres du modèle avec GridSearchCV

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons apprendre à utiliser la fonction GridSearchCV dans Scikit-Learn. GridSearchCV est une fonction utilisée pour rechercher les meilleurs hyperparamètres pour un modèle donné. Il s'agit d'une recherche exhaustive sur des valeurs de paramètres spécifiées pour un estimateur. Les paramètres de l'estimateur utilisé pour appliquer ces méthodes sont optimisés par une grille de recherche croisée sur une grille de paramètres.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49219{{"Optimiser les hyperparamètres du modèle avec GridSearchCV"}} sklearn/model_selection -.-> lab-49219{{"Optimiser les hyperparamètres du modèle avec GridSearchCV"}} sklearn/metrics -.-> lab-49219{{"Optimiser les hyperparamètres du modèle avec GridSearchCV"}} sklearn/datasets -.-> lab-49219{{"Optimiser les hyperparamètres du modèle avec GridSearchCV"}} ml/sklearn -.-> lab-49219{{"Optimiser les hyperparamètres du modèle avec GridSearchCV"}} end

Importation des bibliothèques

Commenceons par importer les bibliothèques nécessaires.

import numpy as np
from matplotlib import pyplot as plt

from sklearn.datasets import make_hastie_10_2
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier

Chargement du jeu de données

Dans cette étape, nous allons charger un jeu de données à l'aide de la fonction make_hastie_10_2 de Scikit-Learn. Cette fonction génère un jeu de données synthétique pour la classification binaire.

X, y = make_hastie_10_2(n_samples=8000, random_state=42)

Définir les hyperparamètres et les métriques d'évaluation

Dans cette étape, nous allons définir les hyperparamètres pour le modèle DecisionTreeClassifier et les métriques d'évaluation que nous allons utiliser. Nous utiliserons les métriques AUC (Area Under the Curve) et Accuracy.

scoring = {"AUC": "roc_auc", "Accuracy": make_scorer(accuracy_score)}

Effectuer la recherche sur grille

Dans cette étape, nous allons utiliser la fonction GridSearchCV pour effectuer la recherche sur grille. Nous allons chercher les meilleurs hyperparamètres pour le paramètre min_samples_split du modèle DecisionTreeClassifier.

gs = GridSearchCV(
    DecisionTreeClassifier(random_state=42),
    param_grid={"min_samples_split": range(2, 403, 20)},
    scoring=scoring,
    refit="AUC",
    n_jobs=2,
    return_train_score=True,
)
gs.fit(X, y)
results = gs.cv_results_

Visualiser les résultats

Dans cette étape, nous allons visualiser les résultats de la recherche sur grille à l'aide d'un graphique. Nous allons tracer les scores AUC et Accuracy pour les ensembles d'entraînement et de test.

plt.figure(figsize=(13, 13))
plt.title("GridSearchCV évaluant en utilisant plusieurs scoreurs simultanément", fontsize=16)

plt.xlabel("min_samples_split")
plt.ylabel("Score")

ax = plt.gca()
ax.set_xlim(0, 402)
ax.set_ylim(0.73, 1)

## Obtenez le tableau numpy régulier à partir du MaskedArray
X_axis = np.array(results["param_min_samples_split"].data, dtype=float)

for scorer, color in zip(sorted(scoring), ["g", "k"]):
    for sample, style in (("train", "--"), ("test", "-")):
        sample_score_mean = results["mean_%s_%s" % (sample, scorer)]
        sample_score_std = results["std_%s_%s" % (sample, scorer)]
        ax.fill_between(
            X_axis,
            sample_score_mean - sample_score_std,
            sample_score_mean + sample_score_std,
            alpha=0.1 if sample == "test" else 0,
            color=color,
        )
        ax.plot(
            X_axis,
            sample_score_mean,
            style,
            color=color,
            alpha=1 if sample == "test" else 0.7,
            label="%s (%s)" % (scorer, sample),
        )

    best_index = np.nonzero(results["rank_test_%s" % scorer] == 1)[0][0]
    best_score = results["mean_test_%s" % scorer][best_index]

    ## Tracez une ligne verticale pointillée au meilleur score pour ce scoreur marqué par x
    ax.plot(
        [
            X_axis[best_index],
        ]
        * 2,
        [0, best_score],
        linestyle="-.",
        color=color,
        marker="x",
        markeredgewidth=3,
        ms=8,
    )

    ## Annoter le meilleur score pour ce scoreur
    ax.annotate("%0.2f" % best_score, (X_axis[best_index], best_score + 0.005))

plt.legend(loc="best")
plt.grid(False)
plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à connaître la fonction GridSearchCV de Scikit-Learn. Nous avons vu comment charger un jeu de données, définir des hyperparamètres et des métriques d'évaluation, effectuer la recherche sur grille et visualiser les résultats à l'aide d'un graphique. GridSearchCV est une fonction importante à utiliser lors de la recherche des meilleurs hyperparamètres pour un modèle donné.