Найти в Дзене
Программист о Data Science

День 5: Алгоритмы оптимизации. Знакомимся с SciPy

Оглавление

SciPy - еще одна популярная математическая библиотека Python, реализующая более высокоуровневые математические функции, например из линейной алгебры или теории вероятностей. SciPy использует NumPy (вообще сложно представить, кто не использует NumPy).

Чтобы понять возможности SciPy, нужно знать базовые (а иногда и не совсем базовые) математические понятия. Чтобы посмотреть хоть что-то рассмотрим простейшее понятие - минимум функции.

Минимум функции

Например задача нахождения точки экстремума функции - это задача из области оптимизации. Рассмотрим, что такое экстремум функции на примере функции подсчета погрешности. Функции подсчета погрешности в простейшем случае измеряют отклонение предсказанного результата от проверочных эталонных значений. Чем меньше значение погрешности возвращает проверочная функция, тем точнее результат предсказания. Т.е. мы заинтересованы в нахождении таких параметров для функции, чтобы функция нахождения погрешности возвращала минимальную погрешность. Конкретные значения таких параметров называются точкой минимума. Аналогичные значения параметров функции, при которых она возвращает максимально возможный результат (в данном случае - наибольшую погрешность) называются точкой максимума. Точки минимума и максимума - это точки экстремума функции. Так как нахождение точки экстремума - процесс итеративный, т.е. в простейшем случае пробуем вызвать функцию с произвольными параметрами - смотрим на результат. Далее пробуем увеличить какой-то параметр - смотрим уменьшился результат функции или увеличился.

И так делаем до тех пор, пока не упрёмся в точку глобального минимума, либо не получим достаточно малую погрешность, с который могли бы жить.
И так делаем до тех пор, пока не упрёмся в точку глобального минимума, либо не получим достаточно малую погрешность, с который могли бы жить.

Таким образом, двигаясь на пути к точки минимума, мы уменьшаем значение функции погрешности, то есть оптимизируем нашу функцию.

Почему точка? Это вопрос геометрического смысла функции. Любая чистая функция - это описанный закон зависимости между входными параметрами и выходным значением функции. Любую математическую зависимость можно визуализировать, например откладывая входной параметр по оси X, а результат по оси Y. Если функция непрерывная, то мы получим график зависимости и если выбрать правильный отрезок X для визуализации, то можно увидеть минимальное значение функции Y - точку экстремума.

Нахождение минимума функции с помощью SciPy

Для начала убедимся, что SciPy пакеты у нас есть в нашем Python окружении.
Для начала убедимся, что SciPy пакеты у нас есть в нашем Python окружении.

Функционал SciPy разбит на подпакеты по областям. В данном случае нас будет интересовать sub package optimze. Импортируем только его используя следующий Python синтаксис:

from <package> import <module or sub-package>
from <package> import <module or sub-package>

Ну а теперь зададим произвольную функцию и найдем ее точку минимума:

Функция должна принимать параметры в виде массива, а не отдельных аргументов
Функция должна принимать параметры в виде массива, а не отдельных аргументов

Проверить результат можно по-разному, например, визуализировав функцию на небольшом отрезке:

Вот она наша точка при x = 1.00000001 и y = -5.0
Вот она наша точка при x = 1.00000001 и y = -5.0