Optimización de funciones con SciPy

La optimización implica encontrar las entradas a una función objetivo que dan como resultado la salida mínima o máxima de la función.

La biblioteca Python de código abierto para informática científica llamada SciPy proporciona un conjunto de algoritmos de optimización. Muchos de los algoritmos se utilizan como bloques de construcción en otros algoritmos, en particular los algoritmos de aprendizaje automático en la biblioteca scikit-learn.

Estas algoritmos de optimización se puede utilizar directamente de forma independiente para optimizar una función. En particular, los algoritmos para la búsqueda local y los algoritmos para la búsqueda global, los dos tipos principales de optimización que puede encontrar en un proyecto de aprendizaje automático.

En este tutorial, descubrirá los algoritmos de optimización proporcionados por la biblioteca SciPy.


Recomendado: ¿Qué es el Big data?.


Después de completar este tutorial, sabrá:

  • La biblioteca SciPy proporciona un conjunto de diferentes algoritmos de optimización para diferentes propósitos.
  • Los algoritmos de optimización de búsqueda local disponibles en SciPy.
  • Los algoritmos de optimización de búsqueda global disponibles en SciPy.

Empecemos.

Optimización de funciones con SciPy

Optimización de funciones con SciPy
Foto de Manoel Lemos, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en tres partes; son:

  1. Optimización con SciPy
  2. Búsqueda local con SciPy
  3. Búsqueda global con SciPy

Optimización con SciPy

La biblioteca de código abierto Python SciPy para informática científica proporciona un conjunto de técnicas de optimización.

Muchos de los algoritmos se utilizan como bloques de construcción para otros algoritmos dentro de la biblioteca SciPy, así como bibliotecas de aprendizaje automático como scikit-learn.

Antes de revisar técnicas específicas, veamos los tipos de algoritmos proporcionados por la biblioteca.

Son:

  • Optimización escalar: Optimización de una función convexa de una sola variable.
  • Busqueda local: Optimización de una función unimodal de múltiples variables.
  • Búsqueda global: Optimización de una función multimodal de múltiples variables.
  • Mínimos cuadrados: Resolver problemas de mínimos cuadrados lineales y no lineales.
  • Ajuste de curvas: Ajusta una curva a una muestra de datos.
  • Hallazgo de raíz: Encuentra la raíz (entrada que da una salida de cero) de una función.
  • Programación lineal: Optimización lineal sujeta a limitaciones.

Todos los algoritmos asumen que la función objetivo que se está optimizando es una función de minimización. Si su función se está maximizando, se puede convertir en minimizada agregando un signo negativo a los valores devueltos por su función objetivo.

Además de la lista anterior, la biblioteca también proporciona funciones de utilidad utilizadas por algunos de los algoritmos, así como el problema de prueba de Rosenbrock.

Para obtener una buena descripción general de las capacidades de optimización de la biblioteca SciPy, consulte:

Ahora que tenemos una idea de alto nivel de los tipos de técnicas de optimización compatibles con la biblioteca, echemos un vistazo más de cerca a dos grupos de algoritmos que es más probable que usemos en el aprendizaje automático aplicado. Son búsqueda local y búsqueda global.

Búsqueda local con SciPy

La búsqueda local, u optimización de función local, se refiere a algoritmos que buscan la entrada a una función que da como resultado la salida mínima o máxima donde se supone que la función o región restringida que se busca tiene un único óptimo, p. unimodal.

La función que se está optimizando puede ser convexa o no, y puede tener una o más de una variable de entrada.

Se puede aplicar una optimización de búsqueda local directamente para optimizar una función si se cree o se sabe que la función es unimodal; de lo contrario, se puede aplicar el algoritmo de búsqueda local para ajustar el resultado de un algoritmo de búsqueda global.

La biblioteca SciPy proporciona búsqueda local a través de la función minimizar ().

los minimizar() function toma como entrada el nombre de la función objetivo que se está minimizando y el punto inicial desde el cual comenzar la búsqueda y devuelve un OptimizeResult que resume el éxito o el fracaso de la búsqueda y los detalles de la solución si se encuentra.

Se puede proporcionar información adicional sobre la función objetivo si se conoce, como los límites de las variables de entrada, una función para calcular la primera derivada de la función (gradiente o matriz jacobiana), una función para calcular la segunda derivada de la función (hessiana matriz) y cualquier restricción en las entradas.

Es importante destacar que la función proporciona el “método”Argumento que permite especificar la optimización específica utilizada en la búsqueda local.

Hay disponible un conjunto de algoritmos de búsqueda local populares, como:

El siguiente ejemplo demuestra cómo resolver una función convexa bidimensional utilizando el algoritmo de búsqueda local L-BFGS-B.

La ejecución del ejemplo realiza la optimización e informa el éxito o el fracaso de la búsqueda, el número de evaluaciones de funciones realizadas y la entrada que dio como resultado los óptimos de la función.

Ahora que estamos familiarizados con el uso de un algoritmo de búsqueda local con SciPy, veamos la búsqueda global.

Búsqueda global con SciPy

La búsqueda global o la optimización de la función global se refieren a algoritmos que buscan la entrada a una función que da como resultado la salida mínima o máxima donde se supone que la función o región restringida que se busca tiene múltiples óptimos locales, p. multimodal.

La función que se optimiza normalmente es no lineal, no convexa y puede tener una o más de una variable de entrada.

Los algoritmos de búsqueda global son típicamente estocásticos, lo que significa que hacen uso de la aleatoriedad en el proceso de búsqueda y pueden o no administrar una población de soluciones candidatas como parte de la búsqueda.

La biblioteca SciPy proporciona una serie de algoritmos estocásticos de optimización global, cada uno a través de diferentes funciones. Son:

La biblioteca también proporciona la función shgo () para la optimización de la secuencia y brute () para la optimización de la búsqueda en la cuadrícula.

Cada algoritmo devuelve un objeto OptimizeResult que resume el éxito o el fracaso de la búsqueda y los detalles de la solución si se encuentra.

El siguiente ejemplo demuestra cómo resolver una función multimodal bidimensional utilizando recocido simulado.

La ejecución del ejemplo realiza la optimización e informa el éxito o el fracaso de la búsqueda, el número de evaluaciones de funciones realizadas y la entrada que dio como resultado los óptimos de la función.

Otras lecturas

Esta sección proporciona más recursos sobre el tema si está buscando profundizar.

API

Artículos

Resumen

En este tutorial, descubrió los algoritmos de optimización proporcionados por la biblioteca SciPy.

Específicamente, aprendiste:

  • La biblioteca SciPy proporciona un conjunto de diferentes algoritmos de optimización para diferentes propósitos.
  • Los algoritmos de optimización de búsqueda local disponibles en SciPy.
  • Los algoritmos de optimización de búsqueda global disponibles en SciPy.

¿Tiene usted alguna pregunta?
Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.