CommencezCommencez gratuitement

Optimisation avec SciPy

Il est possible d'écrire une implantation numpy de la solution analytique pour trouver la valeur minimale du RSS. Mais pour des modèles plus complexes, on ne peut pas obtenir de formules analytiques, et on se tourne donc vers d'autres méthodes.

Dans cet exercice, vous utiliserez scipy.optimize pour adopter une approche plus générale afin de résoudre le même problème d'optimisation.

Ce faisant, vous verrez des valeurs de retour supplémentaires de la méthode qui nous indiquent « jusqu'à quel point le meilleur est bon ». Ici, nous utiliserons les mêmes données mesurées et les mêmes paramètres que dans le dernier exercice pour faciliter la comparaison avec la nouvelle approche scipy.

Cette activité fait partie du cours

Introduction aux modèles linéaires en Python

Voir le cours

Instructions de l’exercice

  • Définissez une fonction model_func(x, a0, a1) qui, pour un tableau x donné, retourne a0 + a1*x.
  • Utilisez la fonction scipy optimize.curve_fit() pour calculer les valeurs optimales de a0 et a1.
  • Déballez param_opt afin d'enregistrer les paramètres du modèle comme suit : a0 = param_opt[0] et a1 = param_opt[1].
  • Utilisez la fonction déjà définie compute_rss_and_plot_fit pour tester et valider votre réponse.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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(____, ____)
Modifier et exécuter le code