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