Optimisation des fonctions avec SciPy

Actualités de de l'Intelligence Artificielle - Machine Learning - Objets connectés

Optimisation des fonctions avec SciPy


L’optimisation consiste à trouver les entrées d’une fonction objective qui aboutissent à la sortie minimale ou maximale de la fonction.

La bibliothèque Python open source pour le calcul scientifique appelée SciPy fournit une suite d’algorithmes d’optimisation. De nombreux algorithmes sont utilisés comme élément constitutif dans d’autres algorithmes, notamment les algorithmes d’apprentissage automatique de la bibliothèque scikit-learn.

Celles-ci algorithmes d’optimisation peut être utilisé directement de manière autonome pour optimiser une fonction. Plus particulièrement, les algorithmes de recherche locale et les algorithmes de recherche globale, les deux principaux types d’optimisation que vous pouvez rencontrer sur un projet d’apprentissage automatique.

Dans ce tutoriel, vous découvrirez les algorithmes d’optimisation fournis par la bibliothèque SciPy.

Après avoir terminé ce tutoriel, vous saurez:

  • La bibliothèque SciPy fournit une suite d’algorithmes d’optimisation différents à des fins différentes.
  • Les algorithmes d’optimisation de la recherche locale disponibles dans SciPy.
  • Les algorithmes d’optimisation de la recherche globale disponibles dans SciPy.

Commençons.

Optimisation des fonctions avec SciPy

Optimisation des fonctions avec SciPy
Photo de Manoel Lemos, certains droits réservés.

Présentation du didacticiel

Ce tutoriel est divisé en trois parties; elles sont:

  1. Optimisation avec SciPy
  2. Recherche locale avec SciPy
  3. Recherche globale avec SciPy

Optimisation avec SciPy

La bibliothèque open source Python SciPy pour le calcul scientifique fournit une suite de techniques d’optimisation.

De nombreux algorithmes sont utilisés comme blocs de construction pour d’autres algorithmes de la bibliothèque SciPy, ainsi que pour des bibliothèques d’apprentissage automatique telles que scikit-learn.

Avant de passer en revue des techniques spécifiques, examinons les types d’algorithmes fournis par la bibliothèque.

Elles sont:

  • Optimisation scalaire: Optimisation d’une fonction variable unique convexe.
  • Recherche locale: Optimisation d’une fonction multi-variable unimodale.
  • Recherche globale: Optimisation d’une fonction multi-variable multimodale.
  • Moindres carrés: Résoudre des problèmes de moindres carrés linéaires et non linéaires.
  • Courbe d’ajustement: Ajuster une courbe à un échantillon de données.
  • Recherche de racine: Trouvez la racine (entrée qui donne une sortie de zéro) d’une fonction.
  • Programmation linéaire: Optimisation linéaire soumise à des contraintes.

Tous les algorithmes supposent que la fonction objectif qui est optimisée est une fonction de minimisation. Si votre fonction maximise, elle peut être convertie en minimisation en ajoutant un signe négatif aux valeurs renvoyées par votre fonction objectif.

En plus de la liste ci-dessus, la bibliothèque fournit également des fonctions utilitaires utilisées par certains des algorithmes, ainsi que le problème de test Rosenbrock.

Pour un bon aperçu des capacités de la bibliothèque SciPy pour l’optimisation, voir:

Maintenant que nous avons une idée de haut niveau des types de techniques d’optimisation pris en charge par la bibliothèque, examinons de plus près deux groupes d’algorithmes que nous sommes plus susceptibles d’utiliser dans l’apprentissage automatique appliqué. Il s’agit de recherche locale et de recherche globale.

Recherche locale avec SciPy

La recherche locale, ou optimisation de fonction locale, fait référence à des algorithmes qui recherchent l’entrée d’une fonction qui aboutit à la sortie minimale ou maximale où la fonction ou la région contrainte recherchée est supposée avoir un seul optima, par exemple unimodal.

La fonction en cours d’optimisation peut être convexe ou non, et peut avoir une ou plusieurs variables d’entrée.

Une optimisation de recherche locale peut être appliquée directement pour optimiser une fonction si la fonction est considérée ou connue comme unimodale; sinon, l’algorithme de recherche locale peut être appliqué pour affiner le résultat d’un algorithme de recherche globale.

La bibliothèque SciPy fournit une recherche locale via la fonction minimiser ().

La minimiser() function prend comme entrée le nom de la fonction objectif qui est minimisée et le point initial à partir duquel démarrer la recherche et renvoie un OptimizeResult qui résume le succès ou l’échec de la recherche et les détails de la solution si elle est trouvée.

Des informations supplémentaires sur la fonction objectif peuvent être fournies si elles sont connues, telles que les bornes sur les variables d’entrée, une fonction pour calculer la première dérivée de la fonction (gradient ou matrice jacobienne), une fonction pour calculer la deuxième dérivée de la fonction (Hessian matrice) et les éventuelles contraintes sur les entrées.

Surtout, la fonction fournit le « méthode”Argument qui permet de spécifier l’optimisation spécifique utilisée dans la recherche locale.

Une suite d’algorithmes de recherche locale populaires est disponible, tels que:

L’exemple ci-dessous montre comment résoudre une fonction convexe bidimensionnelle à l’aide de l’algorithme de recherche locale L-BFGS-B.

L’exécution de l’exemple effectue l’optimisation et signale le succès ou l’échec de la recherche, le nombre d’évaluations de fonction effectuées et l’entrée qui a abouti aux optima de la fonction.

Maintenant que nous sommes familiarisés avec l’utilisation d’un algorithme de recherche locale avec SciPy, examinons la recherche globale.

Recherche globale avec SciPy

La recherche globale ou l’optimisation de fonction globale se réfère à des algorithmes qui recherchent l’entrée d’une fonction qui aboutit à la sortie minimale ou maximale où la fonction ou la région contrainte recherchée est supposée avoir plusieurs optima locaux, par exemple multimodal.

La fonction qui est optimisée est généralement non linéaire, non convexe et peut avoir une ou plusieurs variables d’entrée.

Les algorithmes de recherche globale sont généralement stochastiques, ce qui signifie qu’ils utilisent le caractère aléatoire dans le processus de recherche et peuvent ou non gérer une population de solutions candidates dans le cadre de la recherche.

La bibliothèque SciPy fournit un certain nombre d’algorithmes d’optimisation globale stochastique, chacun via différentes fonctions. Elles sont:

La bibliothèque fournit également la fonction shgo () pour l’optimisation des séquences et la brute () pour l’optimisation de la recherche de grille.

Chaque algorithme renvoie un objet OptimizeResult qui résume le succès ou l’échec de la recherche et les détails de la solution si elle est trouvée.

L’exemple ci-dessous montre comment résoudre une fonction multimodale bidimensionnelle à l’aide d’un recuit simulé.

L’exécution de l’exemple effectue l’optimisation et signale le succès ou l’échec de la recherche, le nombre d’évaluations de fonction effectuées et l’entrée qui a abouti aux optima de la fonction.

Lectures complémentaires

Cette section fournit plus de ressources sur le sujet si vous souhaitez approfondir.

Apis

Des articles

Sommaire

Dans ce tutoriel, vous avez découvert les algorithmes d’optimisation fournis par la bibliothèque SciPy.

Plus précisément, vous avez appris:

  • La bibliothèque SciPy fournit une suite d’algorithmes d’optimisation différents à des fins différentes.
  • Les algorithmes d’optimisation de la recherche locale disponibles dans SciPy.
  • Les algorithmes d’optimisation de la recherche globale disponibles dans SciPy.

Avez-vous des questions?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.