LoslegenKostenlos loslegen

Optimierung mit SciPy

Es ist möglich, mit numpy eine analytische Lösung zu schreiben, um den minimalen RSS-Wert zu finden. Für komplexere Modelle gibt es jedoch keine analytischen Formeln – dann greifen wir zu anderen Methoden.

In dieser Übung verwendest du scipy.optimize, um mit einem allgemeineren Ansatz dasselbe Optimierungsproblem zu lösen.

Dabei erhältst du zusätzliche Rückgabewerte der Methode, die uns beantworten: „Wie gut ist das Optimum?“ Hier nutzen wir dieselben Messdaten und Parameter wie in der vorherigen Übung, damit du den neuen scipy-Ansatz leichter vergleichen kannst.

Diese Übung ist Teil des Kurses

Einführung in lineares Modellieren mit Python

Kurs anzeigen

Anleitung zur Übung

  • Definiere eine Funktion model_func(x, a0, a1), die für ein gegebenes Array x a0 + a1*x zurückgibt.
  • Verwende die scipy-Funktion optimize.curve_fit(), um optimale Werte für a0 und a1 zu berechnen.
  • Entpacke param_opt, sodass die Modellparameter als a0 = param_opt[0] und a1 = param_opt[1] gespeichert werden.
  • Nutze die vordefinierte Funktion compute_rss_and_plot_fit, um deine Lösung zu testen und zu überprüfen.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen