scipy.optimize.

fmin_l_bfgs_b#

scipy.optimize.fmin_l_bfgs_b(функция, x0, fprime=None, args=(), approx_grad=0, bounds=None, m=10, factr=10000000.0, pgtol=1e-05, epsilon=1e-08, iprint= object>, maxfun=15000, maxiter=15000, disp= object>, callback=None, maxls=20)[источник]#

Минимизация функции func с использованием алгоритма L-BFGS-B.

Параметры:
функциявызываемая функция f(x,*args)

Функция для минимизации.

x0ndarray

Начальное приближение.

fprimeвызываемый fprime(x,*args), опционально

Градиент функция. Если None, тогда функция возвращает значение функции и градиент (f, g = func(x, *args)), если только approx_grad равно True, в этом случае функция возвращает только f.

argssequence, optional

Аргументы для передачи в функция и fprime.

approx_gradbool, необязательно

Аппроксимировать ли градиент численно (в этом случае функция возвращает только значение функции).

границысписок, необязательный

(min, max) пары для каждого элемента в x, определяя границы этого параметра. Используйте None или +-inf для одного из min или max когда в этом направлении нет ограничения.

mint, необязательный

Максимальное количество поправок переменной метрики, используемых для определения матрицы ограниченной памяти. (Метод BFGS с ограниченной памятью не хранит полную матрицу Гессе, а использует это количество членов в её приближении.)

factrfloat, опционально

Итерация останавливается, когда (f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps, где eps это машинная точность, которая автоматически генерируется кодом. Типичные значения для factr составляют: 1e12 для низкой точности; 1e7 для умеренной точности; 10.0 для чрезвычайно высокой точности. См. примечания о связи с ftol, который предоставляется (вместо factr) на scipy.optimize.minimize интерфейс к L-BFGS-B.

pgtolfloat, опционально

Итерация остановится, когда max{|proj g_i | i = 1, ..., n} <= pgtol где proj g_i является i-й компонентой проекции градиента.

эпсилонfloat, опционально

Шаг, используемый при approx_grad равно True, для численного вычисления градиента

iprintint, необязательный

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

Устарело с версии 1.15.0: Это ключевое слово устарело и будет удалено из SciPy 1.18.0.

dispint, необязательный

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

Устарело с версии 1.15.0: Это ключевое слово устарело и будет удалено из SciPy 1.18.0.

maxfunint, необязательный

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

maxiterint, необязательный

Максимальное количество итераций.

callbackвызываемый объект, необязательный

Вызывается после каждой итерации, как callback(xk), где xk является текущим вектором параметров.

maxlsint, необязательный

Максимальное количество шагов линейного поиска (за итерацию). По умолчанию 20.

Возвращает:
xarray_like

Оценочная позиция минимума.

ffloat

Значение функция в минимуме.

ddict

Информационный словарь.

  • d[‘warnflag’] это

    • 0 если сошлось,

    • 1, если слишком много вычислений функции или слишком много итераций,

    • 2, если остановлено по другой причине, указанной в d['task']

  • d['grad'] - градиент в минимуме (должен быть около 0)

  • d['funcalls'] — количество вызовов функции.

  • d['nit'] — количество итераций.

Смотрите также

minimize

Интерфейс к алгоритмам минимизации многомерных функций. См. ‘L-BFGS-B’ метод в частности. Обратите внимание, что ftol опция доступна через этот интерфейс, в то время как factr предоставляется через этот интерфейс, где factr является множителем, умножающим стандартную машинную точность представления чисел с плавающей запятой для получения ftol: ftol = factr * numpy.finfo(float).eps.

Примечания

SciPy использует C-переведённую и модифицированную версию кода на Fortran, L-BFGS-B v3.0 (выпущена 25 апреля 2011 года, лицензия BSD-3). Оригинальная версия на Fortran была написана Ciyou Zhu, Richard Byrd, Jorge Nocedal и Jose Luis Morales.

Ссылки

  • R. H. Byrd, P. Lu и J. Nocedal. A Limited Memory Algorithm for Bound Constrained Optimization, (1995), SIAM Journal on Scientific and Statistical Computing, 16, 5, стр. 1190-1208.

  • C. Zhu, R. H. Byrd и J. Nocedal. L-BFGS-B: Algorithm 778: L-BFGS-B, FORTRAN routines for large scale bound constrained optimization (1997), ACM Transactions on Mathematical Software, 23, 4, стр. 550 - 560.

  • J.L. Morales и J. Nocedal. L-BFGS-B: Замечание к алгоритму 778: L-BFGS-B, подпрограммы FORTRAN для оптимизации с ограничениями на больших масштабах (2011), ACM Transactions on Mathematical Software, 38, 1.

Примеры

Решить задачу линейной регрессии через fmin_l_bfgs_b. Для этого сначала мы определяем целевую функцию f(m, b) = (y - y_model)**2, где y описывает наблюдения и y_model предсказание линейной модели как y_model = m*x + b. Границы для параметров, m и bпроизвольно выбраны как (0,5) и (5,10) для этого примера.

>>> import numpy as np
>>> from scipy.optimize import fmin_l_bfgs_b
>>> X = np.arange(0, 10, 1)
>>> M = 2
>>> B = 3
>>> Y = M * X + B
>>> def func(parameters, *args):
...     x = args[0]
...     y = args[1]
...     m, b = parameters
...     y_model = m*x + b
...     error = sum(np.power((y - y_model), 2))
...     return error
>>> initial_values = np.array([0.0, 1.0])
>>> x_opt, f_opt, info = fmin_l_bfgs_b(func, x0=initial_values, args=(X, Y),
...                                    approx_grad=True)
>>> x_opt, f_opt
array([1.99999999, 3.00000006]), 1.7746231151323805e-14  # may vary

Оптимизированные параметры в x_opt совпадают с истинными параметрами m и b. Далее выполним оптимизацию с ограничениями с помощью границы параметр.

>>> bounds = [(0, 5), (5, 10)]
>>> x_opt, f_op, info = fmin_l_bfgs_b(func, x0=initial_values, args=(X, Y),
...                                   approx_grad=True, bounds=bounds)
>>> x_opt, f_opt
array([1.65990508, 5.31649385]), 15.721334516453945  # may vary