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
Instructions
- Définissez une fonction
model_func(x, a0, a1)qui, pour un tableauxdonné, renvoiea0 + a1*x. - Utilisez la fonction
optimize.curve_fit()descipypour calculer les valeurs optimales dea0eta1. - Décompactez
param_optafin d’enregistrer les paramètres du modèle comme suit :a0 = param_opt[0]eta1 = param_opt[1]. - Utilisez la fonction prédéfinie
compute_rss_and_plot_fitpour 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(____, ____)