R
BFGS 與 L-BFGS-B 與 PORT 的優缺點
我正在尋找 Broyden-Fletcher-Goldfarb-Shanno 算法 ( BFGS )、L-BFGS-B 和 PORT 算法在優化中的優缺點。哪一個承諾最好的結果,為什麼?
我從您的問題推斷出您是 R 用戶,並且您想知道是使用
optim
(具有 BFGS 和 L-BFGS-B 選項)還是nlminb
(使用 PORT)。在這裡查看我的答案。相關位:
- optim 可以使用許多不同的算法,包括共軛梯度、牛頓、準牛頓、Nelder-Mead 和模擬退火。最後兩個不需要梯度信息,因此如果梯度不可用或計算不可行(但可能更慢並且分別需要更多參數微調),則可能很有用。它還可以選擇在解決方案中返回計算出的 Hessian,如果您想要標準錯誤以及解決方案本身,則需要該選項。
- nlminb 使用準牛頓算法,該算法與 optim 中的“L-BFGS-B”方法具有相同的優勢。根據我的經驗,它似乎比 optim 更強大,因為它更有可能在 optim 無法收斂的邊緣情況下返回解決方案,儘管這可能取決於問題。如果你提供一個明確的梯度函數,它有一個很好的特性,即在解決方案中對其值進行數值檢查。如果這些值與數值差分得到的值不匹配,nlminb 將給出警告;這有助於確保您在指定梯度時沒有犯錯(對於復雜的可能性很容易做到)。
但是,對於現代工作,您應該能夠比其中任何一個做得更好,因為基本的例程都已有幾十年的歷史了。請參閱 CRAN 上的優化任務視圖以獲取通用優化器包的列表。我特別推薦nloptr、minqa和lbfgsb3包。此外,Rcgmin、Rvmmin和Rtnmin提供了對內置於
optim
. 最後,optimr是一個外殼程序,可讓您使用相同的接口調用其他優化函數。nloptr 和 minqa 都被非常流行的 lme4 包用於混合建模,因此如果您需要它,請投下信任票。