[PYTHON] Essayez l'optimisation des fonctions avec Optuna

introduction

Optuna est un cadre d'auto-optimisation d'hyperparamètres. Il semble être principalement utilisé pour le réglage des hyper paramètres de l'apprentissage automatique. Page d'accueil officielle

Préparation

Tout d'abord, installons la bibliothèque. Vous pouvez l'installer avec pip install optuna </ font>.

Expérience

Cette fois

x^2+y^2+z^2

Optimisons le problème de minimisation.

Définition de la fonction objective

Tout d'abord, définissez la fonction objectif.

#Définir la fonction objectif(Cette fois x^2+y^2+z^2)
def objective(trial):
    #Définissez les paramètres pour optimiser
    param = {
        'x': trial.suggest_int('x', -100, 100),
        'y': trial.suggest_int('y', -100, 100),
        'z': trial.suggest_int('z', -100, 100)
    }
    #Renvoie la valeur d'évaluation(Il est conçu pour être minimisé par défaut)
    return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2

Exécution de l'optimisation

Commencez par créer un objet d'étude, puis effectuez l'optimisation. Vous pouvez définir le nombre de recherches avec n_trials, qui est un argument d'optimze ().

#création d'objet d'étude
study = optuna.create_study()
#Exécution de l'optimisation
study.optimize(objective, n_trials=500)

Une fois exécuté, l'écran suivant s'affiche. (Extrait)

[I 2019-12-01 23:01:21,564] Finished trial#381 resulted in value: 121.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,705] Finished trial#382 resulted in value: 56.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,866] Finished trial#383 resulted in value: 88.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,012] Finished trial#384 resulted in value: 104.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,170] Finished trial#385 resulted in value: 426.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,361] Finished trial#386 resulted in value: 5249.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,523] Finished trial#387 resulted in value: 165.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,684] Finished trial#388 resulted in value: 84.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.

Si vous souhaitez voir les paramètres optimisés, ajoutez ce qui suit:

print(study.best_params)

Si vous souhaitez vérifier la valeur de la fonction objectif optimisée, ajoutez ce qui suit.

print(study.best_value)

De plus, si vous souhaitez voir chaque essai, vous pouvez récupérer les informations de study.trials. Vous pouvez afficher le nombre d'essais, de paramètres et de valeurs de fonction objectif avec le code suivant.

for i in study.trials:
    print(i.number, i.params, i.value)

code

Je vais mettre le code utilisé cette fois.

# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt

#Définir la fonction objectif(Cette fois x^2+y^2+z^2)
def objective(trial):
    #Définissez les paramètres pour optimiser
    param = {
        'x': trial.suggest_int('x', -100, 100),
        'y': trial.suggest_int('y', -100, 100),
        'z': trial.suggest_int('z', -100, 100)
    }
    #Renvoie la valeur d'évaluation(Il est conçu pour être minimisé par défaut)
    return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2

if __name__ == '__main__':
    #création d'objet d'étude
    study = optuna.create_study()
    #Exécution de l'optimisation
    study.optimize(objective, n_trials=500)

    epoches = []    #Pour stocker le nombre d'essais
    values = []    # best_Pour stocker de la valeur
    best = 100000    #Stockez la valeur maximale de manière appropriée
    #faire la meilleure mise à jour
    for i in study.trials:
        if best > i.value:
            best = i.value
        epoches.append(i.number+1)
        values.append(best)
    
    #Paramètres du graphique, etc.
    plt.plot(epoches, values, color="red")
    plt.title("optuna")
    plt.xlabel("trial")
    plt.ylabel("value")
    plt.show()

résultat

Le chiffre du résultat de cette expérience est le suivant. Comme la valeur de best_value était de 3,0, la vraie solution optimale n'a pas été atteinte, mais il a été confirmé qu'elle convergeait à un stade précoce. optuna2.png

Recommended Posts

Essayez l'optimisation des fonctions avec Optuna
Essayez l'optimisation des fonctions à l'aide d'Hyperopt
Essayez de gratter avec Python.
Aménagement routier par optimisation
Introduction à l'optimisation
Essayez SNN avec BindsNET
[Vérification] Essayez d'aligner le groupe de points avec la fonction d'optimisation de pytorch Partie 1
Essayez la régression avec TensorFlow
Essayez d'implémenter le LWMA de MetaTrader avec la fonction de filtre FIR de scipy
Essayez de défier le sol par récursif
Implémenter la fonction de connexion avec django-allauth
Essayez l'apprentissage en profondeur avec TensorFlow
Essayez d'utiliser PythonTex avec Texpad.
Essayez la détection des bords avec OpenCV
Essayez d'implémenter RBM avec chainer.
Essayez Google Mock avec C
Fonction sinueuse approximative avec TensorFlow
Essayez d'utiliser matplotlib avec PyCharm
Essayez de programmer avec un shell!
Essayez la programmation GUI avec Hy
Essayez Auto Encoder avec Pytorch
Essayez la sortie Python avec Haxe 3.2
Essayez l'opération matricielle avec NumPy
Essayez d'implémenter XOR avec PyTorch
Jeux de regroupement avec optimisation des combinaisons
Essayez d'exécuter CNN avec ChainerRL
Essayez différentes choses avec PhantomJS
Restaurez les photos décousues avec l'optimisation!
[Problème d'optimisation] Optuna vs Hyperopt
Essayez le Deep Learning avec FPGA
Optimisation combinée avec recuit quantique
Essayez les techniques d'optimisation de la boîte noire (optimisation Bayes: Optuna, programmation génétique: TPOT)
Optimisation globale à usage général avec Z3
Ajustement des paramètres LightGBM avec Optuna
Essayez d'exécuter Python avec Try Jupyter
Essayez d'implémenter le parfum avec Go
Essayez Selenium Grid avec Docker
Essayez la reconnaissance faciale avec Python
Essayez OpenCV avec Google Colaboratory
Zura avec fonction softmax implémentée
Essayez le machine learning à la légère avec Kaggle
Ajuster les hyper paramètres avec l'optimisation bayésienne
Essayez le chiffrement / déchiffrement à l'aide de la clé OpenSSL avec la fonction pow de Python3
Essayez TensorFlow MNIST avec RNN
Essayez de créer Jupyter Hub avec Docker
Essayez d'utiliser le folium avec anaconda
Essayez de résoudre le problème de minimisation des fonctions en utilisant l'optimisation des groupes de particules
Essayez le Deep Learning avec les concombres FPGA-Select
Essayez de gratter avec Python + Beautiful Soup
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
Résolvez le problème des 4 couleurs grâce à l'optimisation des combinaisons
Paramètre de fonction uniquement pour l'astérisque '*'
Maximisez les ventes des restaurants grâce à l'optimisation combinée
Perceptron multicouche avec chaînette: ajustement fonctionnel
Essayez d'exploiter Facebook avec Python
Allez voir les baleines avec l'optimisation des combinaisons
Paver la route avec l'optimisation des combinaisons
Essayez la décomposition de valeurs singulières avec Python
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2