scipy.optimize.

fmin_l_bfgs_b#

scipy.optimize.fmin_l_bfgs_b(func, x0, fprime=None, args=(), approx_grad=0, bounds=None, m=10, factr=10000000.0, pgtol=1e-05, epsilon=1e-08, iprint=-1, maxfun=15000, maxiter=15000, disp=None, callback=None, maxls=20)[source]#

使用 L-BFGS-B 演算法最小化函數 func。

參數:
funccallable f(x,*args)

要最小化的函數。

x0ndarray

初始猜測值。

fprimecallable fprime(x,*args), optional

func 的梯度。如果為 None,則 func 會傳回函數值和梯度 (f, g = func(x, *args)),除非 approx_grad 為 True,在這種情況下 func 只會傳回 f

argssequence, optional

傳遞給 funcfprime 的引數。

approx_gradbool, optional

是否以數值方式近似梯度(在這種情況下,func 只會傳回函數值)。

boundslist, optional

每個 x 元素的 `(min, max) 配對,定義該參數的邊界。當該方向沒有邊界時,對於 `minmax 之一,請使用 None 或 +-inf。

mint, optional

用於定義有限記憶體矩陣的可變度量校正的最大數量。(有限記憶體 BFGS 方法不儲存完整的 Hessian 矩陣,而是使用這麼多項來近似它。)

factrfloat, optional

(f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps 時迭代停止,其中 eps 是機器精度,由程式碼自動產生。factr 的典型值為:低精度為 1e12;中等精度為 1e7;極高精度為 10.0。請參閱「注意事項」以了解與 ftol 的關係,ftolscipy.optimize.minimize 介面公開(而不是 factr)到 L-BFGS-B。

pgtolfloat, optional

max{|proj g_i | i = 1, ..., n} <= pgtol 時迭代將停止,其中 proj g_i 是投影梯度的第 i 個分量。

epsilonfloat, optional

approx_grad 為 True 時使用的步長,用於數值計算梯度

iprintint, optional

已棄用的選項,先前用於控制問題解決期間在螢幕上列印的文字。現在程式碼不會發出任何輸出,並且此關鍵字沒有任何功能。

已於 1.15.0 版本棄用:此關鍵字已棄用,將從 SciPy 1.17.0 中移除。

dispint, optional

已棄用的選項,先前用於控制問題解決期間在螢幕上列印的文字。現在程式碼不會發出任何輸出,並且此關鍵字沒有任何功能。

已於 1.15.0 版本棄用:此關鍵字已棄用,將從 SciPy 1.17.0 中移除。

maxfunint, optional

函數評估的最大次數。請注意,由於透過數值微分評估梯度,此函數可能會違反限制。

maxiterint, optional

最大迭代次數。

callbackcallable, optional

在每次迭代後呼叫,如 `callback(xk),其中 xk 是目前的參數向量。

maxlsint, optional

線性搜尋步驟的最大次數(每次迭代)。預設值為 20。

回傳值:
xarray_like

最小值的估計位置。

ffloat

func 在最小值處的值。

ddict

資訊字典。

  • d[‘warnflag’] 為

    • 0 如果收斂,

    • 1 如果函數評估次數過多或迭代次數過多,

    • 2 如果因其他原因停止,請參閱 d[‘task’] 中給出的原因

  • d[‘grad’] 是最小值處的梯度(應接近 0)

  • d[‘funcalls’] 是進行的函數呼叫次數。

  • d[‘nit’] 是迭代次數。

另請參閱

minimize

多變數函數最小化演算法的介面。請特別參閱 'L-BFGS-B' method。請注意,ftol 選項可透過該介面使用,而 factr 則透過此介面提供,其中 factr 是乘以預設機器浮點精度的因子,以得出 ftolftol = factr * numpy.finfo(float).eps

註解

SciPy 使用 C 翻譯和修改後的 Fortran 程式碼 L-BFGS-B v3.0(於 2011 年 4 月 25 日發布,BSD-3 授權)。原始 Fortran 版本由 Ciyou Zhu、Richard Byrd、Jorge Nocedal 和 Jose Luis Morales 編寫。

參考文獻

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

  • C. Zhu, R. H. Byrd and 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, pp. 550 - 560.

  • J.L. Morales and J. Nocedal. L-BFGS-B: Remark on Algorithm 778: L-BFGS-B, FORTRAN routines for large scale bound constrained optimization (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。參數 mb 的邊界在此範例中任意選擇為 (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 中的最佳化參數與基本事實參數 mb 一致。接下來,讓我們使用 bounds 參數執行邊界約束最佳化。

>>> 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