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
Instrucțiuni pentru exercițiu
- Definește o funcție
model_func(x, a0, a1)care, pentru un arrayxdat, returneazăa0 + a1*x. - Folosește funcția
scipyoptimize.curve_fit()pentru a calcula valorile optime ale luia0șia1. - Despachetează
param_optastfel încât parametrii modelului să fie stocați caa0 = param_opt[0]șia1 = param_opt[1]. - Folosește funcția predefinită
compute_rss_and_plot_fitpentru 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(____, ____)