IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Definisci una funzione model_func(x, a0, a1) che, dato un array x, restituisca a0 + a1*x.
  • Usa la funzione scipy optimize.curve_fit() per calcolare i valori ottimali di a0 e a1.
  • Estrai i valori da param_opt in modo da salvare i parametri del modello come a0 = param_opt[0] e a1 = param_opt[1].
  • Usa la funzione predefinita compute_rss_and_plot_fit per 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(____, ____)
Modifica ed esegui il codice