Aan de slagBegin gratis

Optimalisatie met SciPy

Het is mogelijk om met numpy een analytische oplossing te schrijven om de minimale RSS-waarde te vinden. Maar voor complexere modellen zijn analytische formules niet haalbaar, en schakelen we over op andere methoden.

In deze oefening gebruik je scipy.optimize om een algemenere aanpak toe te passen voor hetzelfde optimalisatieprobleem.

Daarbij zie je extra retourwaarden van de methode die ons vertellen “hoe goed is het beste”. We gebruiken hier dezelfde gemeten data en parameters als in de vorige oefening, zodat je de nieuwe scipy-aanpak makkelijk kunt vergelijken.

Deze oefening maakt deel uit van de cursus

Introductie tot lineaire modellering in Python

Bekijk cursus

Oefeninstructies

  • Definieer een functie model_func(x, a0, a1) die voor een gegeven array x a0 + a1*x teruggeeft.
  • Gebruik de scipy-functie optimize.curve_fit() om optimale waarden voor a0 en a1 te berekenen.
  • Pak param_opt uit zodat je de modelparameters opslaat als a0 = param_opt[0] en a1 = param_opt[1].
  • Gebruik de vooraf gedefinieerde functie compute_rss_and_plot_fit om je antwoord te testen en te verifiëren.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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(____, ____)
Code bewerken en uitvoeren