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
Oefeninstructies
- Definieer een functie
model_func(x, a0, a1)die voor een gegeven arrayxa0 + a1*xteruggeeft. - Gebruik de
scipy-functieoptimize.curve_fit()om optimale waarden voora0ena1te berekenen. - Pak
param_optuit zodat je de modelparameters opslaat alsa0 = param_opt[0]ena1 = param_opt[1]. - Gebruik de vooraf gedefinieerde functie
compute_rss_and_plot_fitom 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(____, ____)