在R中通过线搜索优化一个参数,通过Nelder-Mead优化其余参数

e3bfsja2  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个对数似然函数,有5个参数需要最大化。其中一个参数需要通过线性搜索方法进行优化,而其他4个参数需要通过Nelder-Mead(或其他导数方法)进行优化。有人知道我将如何进行这两项操作吗?
我现在能想到的唯一执行方法是迭代,一次一个。因此,通过Nelder-Mead优化4个参数,然后在我通过线搜索优化第5个参数时保持它们不变。

2vuwiymt

2vuwiymt1#

我认为你提出的方法(优化参数,例如2-5,然后保持它们不变,同时优化参数1)不会起作用。相反,你应该使用一个 * 嵌套 * 的方法:例如写一个优化四个“多维”参数的函数,并使用该函数进行线搜索。
假设目标函数f()取一个包含5个参数的向量,其中第一个参数对应于线搜索维度。

f2 <- function(p_u, ...) {
   res <- optim(par = start0, 
                fn = function(p) f(c(p_u, p)),
                ...)
   res$value
}
optimize(f2, interval = c(lwr, upr), <optim_args>)
  • FWIW Nelder-Mead * 不是 * 基于导数的方法
  • 我不是100%确定你所说的“线搜索”是什么意思;optimize使用 * 布伦特方法 *(?optimize:“黄金分割搜索和连续抛物线插值的组合”)
  • 我认为将4D搜索嵌套在1D搜索中更有意义,但您也可以按相反的顺序进行
  • 在该实现中,4D搜索每次从相同的起始参数开始。(即,将更快和更鲁棒)使用 * 连续方法 *,其中我们存储了针对p_u的每个值的优化参数,例如在f2()函数的环境中,并且每次都使用先前的起始值(这取决于布伦特方法所确定的p_u值的跳跃程度;在优化程序开始时,如果(例如)布伦特方法从区间两端的函数求值开始,则连续方法实际上可能比原始方法“更差”...)

相关问题