CommencerCommencer gratuitement

Optimisation avec SciPy

Il est possible d’écrire en numpy la solution analytique pour trouver la valeur minimale du RSS. Mais pour des modèles plus complexes, il n’existe pas de formules analytiques ; on se tourne donc vers d’autres méthodes.

Dans cet exercice, vous allez utiliser scipy.optimize pour appliquer une approche plus générale au même problème d’optimisation.

Ce faisant, vous verrez des valeurs de retour supplémentaires indiquant « à quel point le meilleur est bon ». Nous utiliserons les mêmes données mesurées et les mêmes paramètres que dans l’exercice précédent afin de faciliter la comparaison avec la nouvelle approche scipy.

Cet exercice fait partie du cours

Introduction à la modélisation linéaire en Python

Afficher le cours

Instructions

  • Définissez une fonction model_func(x, a0, a1) qui, pour un tableau x donné, renvoie a0 + a1*x.
  • Utilisez la fonction optimize.curve_fit() de scipy pour calculer les valeurs optimales de a0 et a1.
  • Décompactez 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 prédéfinie compute_rss_and_plot_fit pour tester et valider votre réponse.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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