Optimisation bayésienne des hyperparamètres avec Hyperopt
Dans cet exemple, vous allez configurer et exécuter un processus d’optimisation bayésienne des hyperparamètres à l’aide du package Hyperopt (déjà importé sous le nom hp). Vous allez définir le domaine (similaire à la définition de la grille pour une recherche sur grille), puis définir la fonction objectif. Enfin, vous exécuterez l’optimiseur sur 20 itérations.
Vous devez configurer le domaine avec les valeurs suivantes :
max_depthà l’aide d’une distribution quniform (entre 2 et 10, par pas de 2)learning_rateà l’aide d’une distribution uniform (de 0.001 à 0.9)
Notez que, pour les besoins de cet exercice, la taille de l’échantillon de données ainsi que le nombre d’itérations d’hyperopt et du GBM ont été réduits. Si vous testez cette méthode par vous-même sur votre machine, essayez un espace de recherche plus vaste, davantage d’itérations (trials), plus de folds de validation croisée et un jeu de données plus large pour vraiment voir la méthode à l’œuvre !
Cet exercice fait partie du cours
Optimisation des hyperparamètres en Python
Instructions
- Créez un dictionnaire
spaceen utilisant le domaine indiqué ci-dessus. - Définissez la fonction objectif en utilisant un classifieur de gradient boosting.
- Exécutez l’algorithme pour 20 évaluations (utilisez simplement l’algorithme par défaut suggéré dans les diapositives).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Set up space dictionary with specified hyperparameters
space = {'max_depth': hp.____('max_depth', ____, ____, ____),'learning_rate': hp.____('learning_rate', ____,____)}
# Set up objective function
def objective(params):
params = {'max_depth': int(params[____]),'learning_rate': params[____]}
gbm_clf = ____(n_estimators=100, **params)
best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=2, n_jobs=4).mean()
loss = 1 - ____
return ____
# Run the algorithm
best = fmin(fn=____,space=space, max_evals=____, rstate=np.random.default_rng(42), algo=tpe.suggest)
print(____)