Ottimizzazione con Scipy
È possibile scrivere un’implementazione in numpy della soluzione analitica per trovare il valore minimo dell’RSS. Ma per modelli più complessi non è possibile ricavare formule analitiche, quindi si ricorre ad altri metodi.
In questo esercizio userai scipy.optimize per adottare un approccio più generale allo stesso problema di ottimizzazione.
Così facendo, vedrai ulteriori valori restituiti dal metodo che ci dicono «quanto è buono il migliore». Qui useremo gli stessi dati misurati e gli stessi parametri dell’esercizio precedente, per facilitare il confronto con il nuovo approccio scipy.
Questo esercizio fa parte del corso
Introduzione alla modellazione lineare in Python
Istruzioni dell'esercizio
- Definisci una funzione
model_func(x, a0, a1)che, dato un arrayx, restituiscaa0 + a1*x. - Usa la funzione
scipyoptimize.curve_fit()per calcolare i valori ottimali dia0ea1. - Estrai i valori da
param_optin modo da salvare i parametri del modello comea0 = param_opt[0]ea1 = param_opt[1]. - Usa la funzione predefinita
compute_rss_and_plot_fitper testare e verificare la tua risposta.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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(____, ____)