Comece agoraComece grátis

Otimização com SciPy

É possível escrever uma implementação em numpy da solução analítica para encontrar o valor mínimo de RSS. Mas, para modelos mais complexos, não há como obter fórmulas analíticas, então recorremos a outros métodos.

Neste exercício, você vai usar scipy.optimize para aplicar uma abordagem mais geral ao mesmo problema de otimização.

Ao fazer isso, você verá valores de retorno adicionais do método que nos dizem “quão bom é o melhor”. Aqui usaremos os mesmos dados medidos e parâmetros do exercício anterior para facilitar a comparação com a nova abordagem usando scipy.

Este exercicio faz parte do curso

Introdução à Modelagem Linear em Python

Ver curso

Instruções do exercicio

  • Defina uma função model_func(x, a0, a1) que, para um array x, retorne a0 + a1*x.
  • Use a função optimize.curve_fit() do scipy para calcular os valores ótimos de a0 e a1.
  • Desempacote param_opt para armazenar os parâmetros do modelo como a0 = param_opt[0] e a1 = param_opt[1].
  • Use a função predefinida compute_rss_and_plot_fit para testar e verificar sua resposta.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

# Define a model function needed as input to scipy
def model_func(x, a0, a1):
    return ____ + (____*x)

# Load the measured data you want to model
x_data, y_data  = load_data()

# call curve_fit, passing in the model function and data; then unpack the results
param_opt, param_cov = optimize.curve_fit(____, x_data, y_data)
a0 = param_opt[0]  # a0 is the intercept in y = a0 + a1*x
a1 = param_opt[1]  # a1 is the slope     in y = a0 + a1*x

# test that these parameters result in a model that fits the data
fig, rss = compute_rss_and_plot_fit(____, ____)
Editar e Executar Código