Skip to content
Tutoriels
Data-Science
Recherche Aléatoire Véboses: Maîtriser l'optimisation des hyperparamètres avec Scikit-learn

Recherche Aléatoire Verbose: Maîtriser l'optimisation des hyperparamètres avec Scikit-learn

L'optimisation des hyperparamètres est un aspect crucial de l'apprentissage automatique qui peut influencer considérablement les performances d'un modèle. Le processus consiste à ajuster les paramètres d'un modèle pour optimiser ses prédictions. Une méthode populaire pour l'optimisation des hyperparamètres est la recherche aléatoire, en particulier dans la bibliothèque Scikit-learn. Cet article explorera le concept de recherche aléatoire, comment la rendre verbos dans Scikit-learn, et la différence entre la recherche aléatoire et la recherche en grille. Nous explorerons également les meilleures pratiques pour l'optimisation des hyperparamètres en utilisant la recherche aléatoire et comment interpréter les résultats.

La recherche aléatoire dans Scikit-learn est un outil puissant pour l'optimisation des hyperparamètres. Contrairement à la recherche en grille, qui essaie exhaustivement toutes les combinaisons possibles de paramètres, la recherche aléatoire sélectionne des combinaisons aléatoires de paramètres à essayer, ce qui peut être plus efficace. Cette méthode peut être particulièrement utile lorsqu'il s'agit d'un grand nombre de paramètres, car elle vous permet de contrôler le nombre de paramètres à essayer.

Qu'est-ce que la recherche aléatoire dans Scikit-learn ?

La recherche aléatoire dans Scikit-learn est mise en œuvre à travers la classe RandomizedSearchCV. Cette classe effectue une recherche sur les valeurs des paramètres spécifiés pour un estimateur, mais au lieu d'essayer chaque combinaison possible de paramètres (comme GridSearchCV), elle échantillonne un certain nombre de candidats à partir d'un espace de paramètres avec une distribution spécifiée. Cette approche peut être plus efficace qu'une recherche en grille pour l'optimisation des hyperparamètres, notamment lorsqu'il s'agit d'un grand nombre de paramètres ou lorsque le temps nécessaire pour former un modèle est élevé.

Voici un exemple simple de l'utilisation de RandomizedSearchCV:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint
 
## initialiser le classifieur
clf = RandomForestClassifier(n_jobs=-1)
 
## spécifier les paramètres et les distributions à échantillonner
param_dist = {"max_depth": [3, None],
              "max_features": sp_randint(1, 11),
              "min_samples_split": sp_randint(2, 11),
              "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}
 
## lancer la recherche aléatoire
n_iter_search = 20
random_search = RandomizedSearchCV(clf, param_distributions=param_dist,
                                   n_iter=n_iter_search, cv=5)
 
random_search.fit(X, y)

Dans cet exemple, RandomizedSearchCV échantillonnera 20 candidats dans l'espace des paramètres et effectuera une validation croisée à 5 plis sur chacun d'eux.

Rendre la Recherche Aléatoire Verbose

La verbosité de la recherche aléatoire dans Scikit-learn peut être contrôlée à l'aide du paramètre verbose. Plus la valeur est élevée, plus il y aura de messages imprimés pendant le processus d'ajustement. Par exemple, en réglant verbose=10, le maximum de messages sera imprimé, fournissant des informations détaillées sur le processus d'ajustement. Cela peut être particulièrement utile lors de l'exécution de travaux volumineux, car cela vous permet de surveiller l'avancement de l'opération.

Voici comment rendre la recherche aléatoire verbose :

random_search = RandomizedSearchCV(clf, param_distributions=param_dist,
                                   n_iter=n_iter_search, cv=5, verbose=10)

Avec verbose=10, Scikit-learn imprimera des messages pour chaque travail qui est démarré et terminé, comme

Recherche Aléatoire vs Recherche en Grille dans Scikit-learn

La recherche aléatoire et la recherche en grille sont toutes deux des méthodes utilisées pour l'optimisation des hyperparamètres dans Scikit-learn. Bien qu'elles explorent le même espace de paramètres, leur mode de fonctionnement est fondamentalement différent.

La recherche en grille, mise en œuvre dans Scikit-learn sous la forme de GridSearchCV, essaie exhaustivement toutes les combinaisons possibles de paramètres. Cela signifie que si vous avez une liste de 10 valeurs pour un paramètre et 10 pour un autre, la recherche en grille essayera toutes les 100 combinaisons. Cela peut être coûteux et prendre du temps au niveau computationnel, surtout lorsqu'il s'agit d'un grand nombre de paramètres ou lorsque le modèle prend beaucoup de temps à se former. D'un autre côté, la recherche aléatoire, implémentée sous la forme de RandomizedSearchCV, échantillonne de manière aléatoire un nombre donné de candidats dans l'espace des paramètres. Cela signifie que vous pouvez contrôler le nombre de configurations de paramètres qui sont testées, ce qui peut être beaucoup plus efficace que d'essayer toutes les combinaisons, surtout lorsque vous traitez avec un grand nombre de paramètres.

Les résultats des configurations de paramètres entre la recherche aléatoire et la recherche en grille sont assez similaires, mais le temps d'exécution de la recherche aléatoire est nettement plus court. Cela fait de la recherche aléatoire un choix préféré lorsque vous avez affaire à un grand nombre de paramètres et que les ressources informatiques sont limitées.

Voici un exemple d'utilisation de GridSearchCV pour la comparaison:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
 
## initialiser le classifieur
clf = RandomForestClassifier(n_jobs=-1)
 
## spécifier les paramètres et les distributions à échantillonner
param_grid = {"max_depth": [3, None],
              "max_features": [1, 3, 10],
              "min_samples_split": [2, 3, 10],
              "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}
 
## exécuter la recherche en grille
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=5)
 
grid_search.fit(X, y)

Dans cet exemple, GridSearchCV essaiera toutes les combinaisons de paramètres et effectuera une validation croisée à 5 plis sur chacune d'entre elles.

Bien que les deux méthodes aient leurs avantages, le choix entre la recherche aléatoire et la recherche en grille dépendra de vos besoins et de vos ressources spécifiques. Si vous disposez de nombreuses ressources informatiques et de temps, et que vous voulez vous assurer de trouver les paramètres optimaux, la recherche en grille peut être la solution. Cependant, si vous voulez gagner du temps et des ressources, et que vous êtes satisfait de trouver un ensemble de paramètres qui est suffisamment bon, alors la recherche aléatoire peut être un meilleur choix.

Meilleures pratiques pour l'ajustement des hyperparamètres en utilisant la recherche aléatoire

Lors de l'utilisation de la recherche aléatoire pour l'ajustement des hyperparamètres, il existe plusieurs meilleures pratiques qui peuvent vous aider à tirer le meilleur parti de cette méthode.

Tout d'abord, il est important de bien comprendre les hyperparamètres du modèle avec lequel vous travaillez et la plage de valeurs qu'ils peuvent prendre. Cela vous permettra de définir un espace de paramètres significatif pour la recherche aléatoire à échantillonner.

Deuxièmement, envisagez d'utiliser une validation croisée stratifiée k-fold au lieu d'une simple division en ensembles d'entraînement et de test. Cela garantit que chaque pli des données a la même proportion d'échantillons de chaque classe, ce qui peut conduire à des résultats plus fiables, surtout lorsque vous travaillez avec des ensembles de données déséquilibrés.

Troisièmement, n'oubliez pas de définir un état aléatoire pour la recherche aléatoire afin de garantir que vos résultats sont reproductibles. Cela peut être particulièrement utile lorsque vous souhaitez comparer les performances de différents modèles ou ensembles de paramètres.

Enfin, n'oubliez pas d'utiliser le paramètre verbose pour surveiller l'avancement de la recherche. Cela peut être particulièrement utile lors de l'exécution de gros jobs, car cela vous permet de suivre l'opération et de diagnostiquer d'éventuels problèmes.

Interprétation des résultats de la recherche aléatoire dans Scikit-learn

La sortie d'une recherche aléatoire dans Scikit-learn est un objet RandomizedSearchCV ajusté. Cet objet contient des informations sur les meilleurs paramètres trouvés lors de la recherche, les résultats de la validation croisée pour chaque combinaison de paramètres, et le modèle ajusté avec les meilleurs paramètres.

Vous pouvez accéder aux meilleurs paramètres en utilisant l'attribut best_params_, comme ceci:

best_params = random_search.best_params_

Cela renverra un dictionnaire avec les noms des paramètres comme clés et les meilleures valeurs comme valeurs.

Les résultats de la validation croisée peuvent être consultés en utilisant l'attribut cv_results_. Cela renvoie un dictionnaire avec différentes clés liées au processus de validation croisée, telles que la moyenne et l'écart-type du score de test pour chaque combinaison de paramètres.

Le modèle ajusté avec les meilleurs paramètres peut être consulté en utilisant l'attribut best_estimator_. Vous pouvez utiliser ce modèle pour faire des prédictions sur de nouvelles données.

FAQ

Quelle est la différence entre la recherche aléatoire et la recherche en grille dans Scikit-learn?

La recherche aléatoire et la recherche en grille sont deux méthodes d'optimisation des hyperparamètres dans Scikit-learn. La principale différence entre elles est que la recherche en grille essaie exhaustivement toutes les combinaisons possibles de paramètres, tandis que la recherche aléatoire échantillonne de manière aléatoire un nombre donné de candidats dans l'espace des paramètres. Cela rend la recherche aléatoire plus efficace que la recherche en grille lorsqu'il y a un grand nombre de paramètres ou lorsque le modèle prend beaucoup de temps à s'entraîner.

Comment rendre la recherche aléatoire verbeuse dans Scikit-learn?

La verbeusité de la recherche aléatoire dans Scikit-learn peut être contrôlée en utilisant le paramètre verbose. Plus la valeur est élevée, plus il y aura de messages imprimés pendant le processus d'ajustement. Par exemple, en définissant verbose=10, le maximum de messages sera imprimé, ce qui permet d'obtenir des informations détaillées sur le processus d'ajustement.

Quelles sont les meilleures pratiques pour l'ajustement des hyperparamètres en utilisant la recherche aléatoire?

Certaines meilleures pratiques pour l'ajustement des hyperparamètres en utilisant la recherche aléatoire incluent la compréhension des hyperparamètres et de leur plage de valeurs, l'utilisation de la validation croisée stratifiée k-fold, la définition d'un état aléatoire pour la reproductibilité, et l'utilisation du paramètre verbose pour surveiller l'avancement de la recherche.