ПочатиПочніть безкоштовно

Оптимізація з Scipy

Можна написати реалізацію в numpy для аналітичного розв'язку пошуку мінімального значення RSS. Але для складніших моделей знайти аналітичні формули неможливо, тому ми вдаємося до інших методів.

У цій вправі ви використаєте scipy.optimize, щоб застосувати загальніший підхід до розв'язання того самого завдання оптимізації.

Так ви побачите додаткові значення, які повертає метод і які підкажуть нам, «наскільки хорошим є найкращий» розв'язок. Тут ми використаємо ті самі виміряні дані та параметри, що й у попередній вправі, щоб було зручно порівняти новий підхід з scipy.

Ця вправа є частиною курсу

Вступ до лінійного моделювання в Python

Переглянути курс

Інструкції до вправи

  • Визначте функцію model_func(x, a0, a1), яка для заданого масиву x повертає a0 + a1*x.
  • Використайте функцію scipy optimize.curve_fit(), щоб обчислити оптимальні значення для a0 та a1.
  • Розпакуйте param_opt, щоб зберегти параметри моделі як a0 = param_opt[0] та a1 = param_opt[1].
  • Скористайтеся наперед визначеною функцією compute_rss_and_plot_fit, щоб перевірити та підтвердити вашу відповідь.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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(____, ____)
Редагувати та запускати код