ComenzarEmpieza gratis

Optimización con SciPy

Es posible escribir una implementación en numpy de la solución analítica para encontrar el valor mínimo del RSS. Pero en modelos más complejos, no es posible obtener fórmulas analíticas, así que recurrimos a otros métodos.

En este ejercicio usarás scipy.optimize para aplicar un enfoque más general al mismo problema de optimización.

Al hacerlo, verás valores adicionales que devuelve el método y que nos indican “qué tan bueno es el mejor”. Aquí utilizaremos los mismos datos medidos y parámetros del ejercicio anterior para facilitar la comparación con el nuevo enfoque de scipy.

Este ejercicio forma parte del curso

Introducción al modelado lineal en Python

Ver curso

Instrucciones del ejercicio

  • Define una función model_func(x, a0, a1) que, para un array x dado, devuelva a0 + a1*x.
  • Usa la función optimize.curve_fit() de scipy para calcular los valores óptimos de a0 y a1.
  • Desempaqueta param_opt para guardar los parámetros del modelo como a0 = param_opt[0] y a1 = param_opt[1].
  • Usa la función predefinida compute_rss_and_plot_fit para probar y verificar tu respuesta.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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 y ejecutar código