Kom igångKom igång gratis

Optimering med Scipy

Det går att skriva en numpy-implementation av den analytiska lösningen för att hitta det minimala RSS-värdet. För mer komplexa modeller är det dock inte möjligt att hitta analytiska formler, och därför använder vi andra metoder.

I den här övningen använder du scipy.optimize för ett mer generellt angreppssätt för att lösa samma optimeringsproblem.

Du kommer att se ytterligare returvärden från metoden som berättar "hur bra är det bästa resultatet". Vi använder samma uppmätta data och parametrar som i föregående övning, så att du enkelt kan jämföra det nya scipy-tillvägagångssättet.

Den här övningen är en del av kursen

Introduktion till linjär modellering i Python

Visa kurs

Övningsinstruktioner

  • Definiera en funktion model_func(x, a0, a1) som, för en given array x, returnerar a0 + a1*x.
  • Använd scipy-funktionen optimize.curve_fit() för att beräkna optimala värden för a0 och a1.
  • Packa upp param_opt så att modellparametrarna lagras som a0 = param_opt[0] och a1 = param_opt[1].
  • Använd den fördefinierade funktionen compute_rss_and_plot_fit för att testa och verifiera ditt svar.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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(____, ____)
Redigera och kör kod