Otimização de funções com SciPy

Otimização de funções com SciPy

A otimização envolve encontrar as entradas para uma função objetiva que resultam na saída mínima ou máxima da função.

A biblioteca Python de código aberto para computação científica chamada SciPy fornece um conjunto de algoritmos de otimização. Muitos dos algoritmos são usados ​​como um bloco de construção em outros algoritmos, mais notavelmente algoritmos de aprendizado de máquina na biblioteca scikit-learn.

Esses algoritmos de otimização pode ser usado diretamente de maneira independente para otimizar uma função. Mais notavelmente, algoritmos para pesquisa local e algoritmos para pesquisa global, os dois principais tipos de otimização que você pode encontrar em um projeto de aprendizado de máquina.

Neste tutorial, você descobrirá algoritmos de otimização fornecidos pela biblioteca SciPy.

Depois de concluir este tutorial, você saberá:

  • A biblioteca SciPy fornece um conjunto de algoritmos de otimização diferentes para finalidades diferentes.
  • Os algoritmos de otimização de busca local disponíveis no SciPy.
  • Os algoritmos de otimização de pesquisa global disponíveis no SciPy.

Vamos começar.

Otimização de funções com SciPy

Otimização de funções com SciPy
Foto de Manoel Lemos, alguns direitos reservados.

Visão geral do tutorial

Este tutorial é dividido em três partes; eles estão:

  1. Otimização com SciPy
  2. Pesquisa local com SciPy
  3. Pesquisa Global com SciPy

Otimização com SciPy

A biblioteca de código aberto Python SciPy para computação científica fornece um conjunto de técnicas de otimização.

Muitos dos algoritmos são usados ​​como blocos de construção para outros algoritmos na biblioteca SciPy, bem como bibliotecas de aprendizado de máquina, como o scikit-learn.

Antes de revisarmos as técnicas específicas, vamos examinar os tipos de algoritmos fornecidos pela biblioteca.

Eles estão:

  • Otimização Escalar: Otimização de uma função única variável convexa.
  • Pesquisa Local: Otimização de uma função de variável múltipla unimodal.
  • Pesquisa Global: Otimização de uma função de múltiplas variáveis ​​multimodais.
  • Mínimos quadrados: Resolver problemas de mínimos quadrados lineares e não lineares.
  • Ajuste de curva: Ajusta uma curva a uma amostra de dados.
  • Root Finding: Encontre a raiz (entrada que dá uma saída de zero) de uma função.
  • Programação linear: Otimização linear sujeita a restrições.

Todos os algoritmos assumem que a função objetivo que está sendo otimizada é uma função de minimização. Se sua função estiver maximizando, ela pode ser convertida em minimização adicionando um sinal negativo aos valores retornados de sua função objetivo.

Além da lista acima, a biblioteca também fornece funções utilitárias usadas por alguns dos algoritmos, bem como o problema de teste de Rosenbrock.

Para uma boa visão geral dos recursos da biblioteca SciPy para otimização, consulte:

Agora que temos uma ideia de alto nível dos tipos de técnicas de otimização suportadas pela biblioteca, vamos examinar mais de perto dois grupos de algoritmos que provavelmente usaremos no aprendizado de máquina aplicado. Eles são a pesquisa local e a pesquisa global.

Pesquisa local com SciPy

Pesquisa local, ou otimização de função local, refere-se a algoritmos que buscam a entrada para uma função que resulta na saída mínima ou máxima, onde a função ou região restrita sendo pesquisada é considerada como tendo um único ótimo, por exemplo, unimodal.

A função que está sendo otimizada pode ou não ser convexa e pode ter uma ou mais variáveis ​​de entrada.

Uma otimização de busca local pode ser aplicada diretamente para otimizar uma função se a função for considerada ou conhecida como unimodal; caso contrário, o algoritmo de pesquisa local pode ser aplicado para ajustar o resultado de um algoritmo de pesquisa global.

A biblioteca SciPy fornece pesquisa local por meio da função minimize ().

O minimizar() function toma como entrada o nome da função objetivo que está sendo minimizada e o ponto inicial a partir do qual iniciar a pesquisa e retorna um OptimizeResult que resume o sucesso ou fracasso da pesquisa e os detalhes da solução se encontrada.

Informações adicionais sobre a função objetivo podem ser fornecidas se conhecidas, como os limites nas variáveis ​​de entrada, uma função para calcular a primeira derivada da função (gradiente ou matriz Jacobiana), uma função para calcular a segunda derivada da função (Hessiana matriz) e quaisquer restrições nas entradas.

É importante ressaltar que a função fornece o “método”Argumento que permite especificar a otimização específica usada na pesquisa local.

Um conjunto de algoritmos de pesquisa local populares está disponível, como:

O exemplo abaixo demonstra como resolver uma função convexa bidimensional usando o algoritmo de busca local L-BFGS-B.

A execução do exemplo realiza a otimização e relata o sucesso ou falha da pesquisa, o número de avaliações de função realizadas e a entrada que resultou no ótimo da função.

Agora que estamos familiarizados com o uso de um algoritmo de pesquisa local com SciPy, vamos dar uma olhada na pesquisa global.

Pesquisa Global com SciPy

A busca global ou otimização de função global se refere a algoritmos que buscam a entrada para uma função que resulta na saída mínima ou máxima, onde a função ou região restrita sendo pesquisada é considerada como tendo múltiplos ótimos locais, por exemplo, multimodal.

A função que está sendo otimizada é normalmente não linear, não convexa e pode ter uma ou mais de uma variável de entrada.

Os algoritmos de pesquisa global são normalmente estocásticos, o que significa que eles fazem uso da aleatoriedade no processo de pesquisa e podem ou não gerenciar uma população de soluções candidatas como parte da pesquisa.

A biblioteca SciPy fornece vários algoritmos de otimização global estocástica, cada um por meio de funções diferentes. Eles estão:

A biblioteca também fornece a função shgo () para otimização de sequência e brute () para otimização de pesquisa de grade.

Cada algoritmo retorna um objeto OptimizeResult que resume o sucesso ou falha da pesquisa e os detalhes da solução, se encontrada.

O exemplo abaixo demonstra como resolver uma função multimodal bidimensional usando recozimento simulado.

Executar o exemplo executa a otimização e relata o sucesso ou falha da pesquisa, o número de avaliações de função realizadas e a entrada que resultou no ótimo da função.

Leitura Adicional

Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.

APIs

Artigos

Resumo

Neste tutorial, você descobriu algoritmos de otimização fornecidos pela biblioteca SciPy.

Especificamente, você aprendeu:

  • A biblioteca SciPy fornece um conjunto de algoritmos de otimização diferentes para finalidades diferentes.
  • Os algoritmos de otimização de busca local disponíveis no SciPy.
  • Os algoritmos de otimização de pesquisa global disponíveis no SciPy.

Você tem alguma pergunta?
Tire suas dúvidas nos comentários abaixo e farei o possível para responder.

Você também pode estar interessado em