ÎncepețiÎncepe gratuit

Optimizare cu Scipy

Este posibil să scrii o implementare numpy a soluției analitice pentru a găsi valoarea minimă a RSS. Însă, pentru modele mai complexe, derivarea unor formule analitice nu este posibilă, așa că apelăm la alte metode.

În acest exercițiu vei folosi scipy.optimize pentru a aplica o abordare mai generală și a rezolva aceeași problemă de optimizare.

Astfel, vei observa valori suplimentare returnate de metodă, care ne răspund la întrebarea „cât de bun este cel mai bun rezultat?". Vom folosi aceleași date măsurate și aceiași parametri ca în exercițiul anterior, pentru a putea compara mai ușor noua abordare cu scipy.

Acest exercițiu face parte din cursul

Introducere în modelarea liniară în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Definește o funcție model_func(x, a0, a1) care, pentru un array x dat, returnează a0 + a1*x.
  • Folosește funcția scipy optimize.curve_fit() pentru a calcula valorile optime ale lui a0 și a1.
  • Despachetează param_opt astfel încât parametrii modelului să fie stocați ca a0 = param_opt[0] și a1 = param_opt[1].
  • Folosește funcția predefinită compute_rss_and_plot_fit pentru a testa și a verifica răspunsul tău.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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(____, ____)
Editează și rulează codul