НачатьНачать бесплатно

Оптимизация с помощью Scipy

Можно написать реализацию на numpy, используя аналитическое решение для нахождения минимального значения RSS. Однако для более сложных моделей аналитические формулы получить невозможно, поэтому приходится обращаться к другим методам.

В этом упражнении вы будете использовать scipy.optimize, чтобы применить более универсальный подход к решению той же задачи оптимизации.

При этом вы увидите дополнительные возвращаемые значения метода, которые отвечают на вопрос «насколько хорош найденный результат». Для удобства сравнения с новым подходом scipy мы воспользуемся теми же измеренными данными и параметрами, что и в предыдущем упражнении.

Это упражнение является частью курса

Введение в линейное моделирование на Python

Посмотреть курс

Инструкции к упражнению

  • Определите функцию model_func(x, a0, a1), которая для заданного массива x возвращает a0 + a1*x.
  • Используйте функцию optimize.curve_fit() из библиотеки scipy, чтобы вычислить оптимальные значения 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(____, ____)
Редактировать и запускать код