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
傳遞給 func 和 fprime 的引數。
- approx_gradbool, optional
是否以數值方式近似梯度(在這種情況下,func 只會傳回函數值)。
- boundslist, optional
每個
x
元素的 `(min, max)
配對,定義該參數的邊界。當該方向沒有邊界時,對於 `min
或max
之一,請使用 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 的關係,ftol 由scipy.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 是乘以預設機器浮點精度的因子,以得出 ftol:
ftol = 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
。參數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 參數執行邊界約束最佳化。>>> 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