[PYTHON] Essayez l'optimisation des fonctions à l'aide d'Hyperopt

introduction

Hyperopt est un framework d'optimisation automatique des hyper paramètres. Il semble être principalement utilisé pour le réglage des hyper paramètres de l'apprentissage automatique.

Préparation

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

Expérience

Cette fois

x^2+y^2+z^2

Optimisons le problème de minimisation de.

Définition de la fonction objective

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

#Définir la fonction objectif
def objective_hyperopt(args):
    x, y, z = args
    return x ** 2 + y ** 2 + z ** 2

Exécution de l'optimisation

Commençons par définir l'espace de recherche pour les paramètres à optimiser. Puis utilisez fmin () pour lancer la recherche. Définissons le nombre de recherches avec l'argument max_evals.

#Optimisé avec hyperopt
def hyperopt_exe():
    space = [
        hp.uniform('x', -100, 100),
        hp.uniform('y', -100, 100),
        hp.uniform('z', -100, 100)
    ]

    #Un objet pour enregistrer l'état de la recherche
    trials = Trials()

    #Commencer l'exploration
    best = fmin(objective_hyperopt, space, algo=tpe.suggest, max_evals=500, trials=trials)

Si vous voulez connaître le résultat final, ajoutez ce qui suit.

    #Sortir le résultat
    print(best)

Récupérons les informations recherchées à partir de l'objet trial. Vous pouvez afficher les paramètres et les valeurs de fonction objectif pour chaque essai en ajoutant ce qui suit.

    #Examiner le processus de recherche
    for i, n in zip(trials.trials, range(500)):
        vals = i['misc']['vals']
        result = i['result']['loss']
        print('vals:', vals, 'result:', result)

code

Le code cette fois est le suivant.

# -*- coding: utf-8 -*-
import hyperopt
from hyperopt import hp
from hyperopt import fmin
from hyperopt import tpe
from hyperopt import Trials
import matplotlib.pyplot as plt

#Définir la fonction objectif pour hyperopt
def objective_hyperopt(args):
    x, y, z = args
    return x ** 2 + y ** 2 + z ** 2

#Optimisé avec hyperopt
def hyperopt_exe():
    #Paramètres de l'espace de recherche
    space = [
        hp.uniform('x', -100, 100),
        hp.uniform('y', -100, 100),
        hp.uniform('z', -100, 100)
    ]

    #Un objet pour enregistrer l'état de la recherche
    trials = Trials()

    #Commencer l'exploration
    best = fmin(objective_hyperopt, space, algo=tpe.suggest, max_evals=500, trials=trials)
    #Sortir le résultat
    print(best)

    epoches = []
    values = []
    best = 100000
    #Examiner le processus de recherche
    for i, n in zip(trials.trials, range(500)):
        if best > i['result']['loss']:
            best = i['result']['loss']
        epoches.append(n+1)
        values.append(best)
        vals = i['misc']['vals']
        result = i['result']['loss']
        print('vals:', vals, 'result:', result)

    #Dessinez un graphique
    plt.plot(epoches, values, color="red")
    plt.title("hyperopt")
    plt.xlabel("trial")
    plt.ylabel("value")
    plt.show()

if __name__ == '__main__':
    hyperopt_exe()

résultat

Le chiffre du résultat de cette expérience est le suivant. Il a convergé à un stade précoce. hyperopt.png

Site de référence

Optimisation des fonctions utilisant Hyperopt Python: sélectionnez des hyper paramètres pour le modèle d'apprentissage automatique avec Hyperopt

Recommended Posts

Essayez l'optimisation des fonctions à l'aide d'Hyperopt
Essayez l'optimisation des fonctions avec Optuna
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser Cookiecutter
Essayez d'utiliser PDFMiner
Essayez d'utiliser la fonction d'intégration de données de scanpy (sc.tl.ingest)
Essayez d'utiliser des géopandas
Essayez d'utiliser Selenium
Essayez d'utiliser scipy
Essayez d'utiliser pandas.DataFrame
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser Platypus, une bibliothèque d'optimisation polyvalente
Essayez d'utiliser PyODE
Essayez de résoudre le problème de minimisation des fonctions en utilisant l'optimisation des groupes de particules
Ajustement de fonction (à l'aide de Keras)
Essayez d'utiliser virtualenv (virtualenvwrapper)
[Azure] Essayez d'utiliser Azure Functions
Essayez d'utiliser virtualenv maintenant
Essayez d'utiliser W & B
Essayez d'utiliser Django templates.html
[Kaggle] Essayez d'utiliser LGBM
Essayez d'utiliser l'analyseur de flux de Python.
Essayez d'utiliser Tkinter de Python
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser collate_fn de Pytorch
Essayez d'utiliser PythonTex avec Texpad.
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser l'image Docker de Jupyter
Essayez d'utiliser scikit-learn (1) - Clustering K par méthode moyenne
Essayez d'utiliser matplotlib avec PyCharm
Essayez d'utiliser Azure Logic Apps
Essayez d'utiliser Kubernetes Client -Python-
[Kaggle] Essayez d'utiliser xg boost
Essayez d'utiliser l'API Twitter
Essayez d'utiliser OpenCV sur Windows
Essayez d'utiliser Jupyter Notebook de manière dynamique
[Problème d'optimisation] Optuna vs Hyperopt
Essayez d'utiliser AWS SageMaker Studio
Essayez de tweeter automatiquement en utilisant Selenium.
Essayez d'utiliser SQLAlchemy + MySQL (partie 1)
Essayez d'utiliser l'API Twitter
Remarques sur l'optimisation à l'aide de Pytorch
Essayez d'utiliser SQLAlchemy + MySQL (partie 2)
Essayez d'utiliser la fonction de modèle de Django
Essayez d'utiliser l'API PeeringDB 2.0
Essayez d'utiliser la fonction de brouillon de Pelican
Essayez d'utiliser pytest-Overview and Samples-
Essayez d'exécuter une fonction écrite en Python à l'aide de Fn Project
Essayez le chiffrement / déchiffrement à l'aide de la clé OpenSSL avec la fonction pow de Python3
Essayez d'utiliser le folium avec anaconda
Essayez d'utiliser l'API Admin de la passerelle Janus
Essayez d'utiliser Spyder inclus dans Anaconda
Résolvez des problèmes d'optimisation multivariée à l'aide de sagemath
Essayez d'utiliser des modèles de conception (édition exportateur)
Essayez d'utiliser Pillow sur iPython (partie 1)
Essayez d'utiliser Pillow sur iPython (partie 2)
Essayez d'utiliser l'API de Pleasant (python / FastAPI)