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=, maxfun=15000, maxiter=15000, disp=, 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