Optimisation d'hyperparamètres : Recherche aléatoire vs Recherche en grille

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

En apprentissage automatique, les hyperparamètres sont des paramètres qui ne sont pas appris à partir des données, mais plutôt définis avant l'entraînement. La sélection d'hyperparamètres appropriés est cruciale pour atteindre une haute précision dans les modèles d'apprentissage automatique. Deux méthodes courantes d'optimisation d'hyperparamètres sont la recherche aléatoire et la recherche en grille. Dans ce laboratoire, nous comparerons ces deux méthodes pour optimiser les hyperparamètres d'un Support Vector Machine (SVM) linéaire avec entraînement par Descente de Gradient Stochastique (SGD).

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 limites de Jupyter Notebook.

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

Importez les bibliothèques nécessaires et chargez les données

Nous commencerons par importer les bibliothèques nécessaires et charger l'ensemble de données des chiffres à partir de scikit-learn.

import numpy as np
from time import time
import scipy.stats as stats
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from sklearn.datasets import load_digits
from sklearn.linear_model import SGDClassifier

## chargez l'ensemble de données des chiffres
X, y = load_digits(return_X_y=True, n_class=3)

Créez un modèle SVM

Nous allons créer un modèle SVM linéaire avec entraînement SGD.

## créez un modèle SVM avec entraînement SGD
clf = SGDClassifier(loss="hinge", penalty="elasticnet", fit_intercept=True)

Recherche aléatoire pour l'optimisation d'hyperparamètres

Nous utiliserons la recherche aléatoire pour explorer l'espace d'hyperparamètres et trouver les meilleurs hyperparamètres pour notre modèle SVM.

## spécifiez les paramètres et les distributions à échantillonner
param_dist = {
    "average": [True, False],
    "l1_ratio": stats.uniform(0, 1),
    "alpha": stats.loguniform(1e-2, 1e0),
}

## exécutez la recherche aléatoire
n_iter_search = 15
random_search = RandomizedSearchCV(
    clf, param_distributions=param_dist, n_iter=n_iter_search
)

start = time()
random_search.fit(X, y)
print(
    "RandomizedSearchCV a pris %.2f secondes pour %d paramètres candidats."
    % ((time() - start), n_iter_search)
)

## affichez les résultats
report(random_search.cv_results_)

Recherche en grille pour l'optimisation d'hyperparamètres

Nous utiliserons la recherche en grille pour explorer l'espace d'hyperparamètres et trouver les meilleurs hyperparamètres pour notre modèle SVM.

## spécifiez les paramètres à rechercher
param_grid = {
    "average": [True, False],
    "l1_ratio": np.linspace(0, 1, num=10),
    "alpha": np.power(10, np.arange(-2, 1, dtype=float)),
}

## exécutez la recherche en grille
grid_search = GridSearchCV(clf, param_grid=param_grid)

start = time()
grid_search.fit(X, y)

print(
    "GridSearchCV a pris %.2f secondes pour %d paramètres candidats."
    % (time() - start, len(grid_search.cv_results_["params"]))
)

## affichez les résultats
report(grid_search.cv_results_)

Sommaire

Dans ce laboratoire, nous avons comparé la recherche aléatoire et la recherche en grille pour l'optimisation d'hyperparamètres d'un modèle SVM linéaire avec entraînement SGD. Nous avons constaté que les deux méthodes ont exploré le même espace d'hyperparamètres, mais la recherche aléatoire était considérablement plus rapide. Les meilleurs hyperparamètres trouvés par chaque méthode étaient similaires en termes de performance, mais la recherche aléatoire peut avoir une performance légèrement moins bonne en raison du bruit. En pratique, nous ne chercherions pas simultanément sur autant d'hyperparamètres, mais seulement sur les plus importants.