Optymalizacja z użyciem Scipy
Można napisać implementację w numpy opartą na analitycznym rozwiązaniu, które pozwala znaleźć minimalną wartość RSS. Jednak w przypadku bardziej złożonych modeli wyznaczenie wzorów analitycznych nie jest możliwe – dlatego sięgamy po inne metody.
W tym ćwiczeniu użyjesz scipy.optimize, aby zastosować bardziej ogólne podejście do tego samego problemu optymalizacyjnego.
Przy okazji zobaczysz dodatkowe wartości zwracane przez tę metodę, które mówią nam „jak dobre jest najlepsze rozwiązanie". Dla łatwego porównania nowego podejścia scipy z poprzednim ćwiczeniem użyjemy tych samych danych i parametrów.
To ćwiczenie jest częścią kursu
Wprowadzenie do modelowania liniowego w Pythonie
Instrukcje do ćwiczenia
- Zdefiniuj funkcję
model_func(x, a0, a1), która dla danej tablicyxzwracaa0 + a1*x. - Użyj funkcji
optimize.curve_fit()z bibliotekiscipy, aby obliczyć optymalne wartościa0ia1. - Rozpakuj
param_opt, zapisując parametry modelu jakoa0 = param_opt[0]ia1 = param_opt[1]. - Użyj predefiniowanej funkcji
compute_rss_and_plot_fit, aby przetestować i zweryfikować swoje rozwiązanie.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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(____, ____)