gpt4 book ai didi

R:一维优化

转载 作者:行者123 更新时间:2023-12-03 17:09:45 26 4
gpt4 key购买 nike

我想使用 optimize() 或类似的东西来搜索函数的最小值/最大值。但是我不确定应该优化函数的确切范围,这是函数“optimze()”的必需参数(例如 optimize(f=FUN,interval=c(lowerBound,upperBound)) )。

在这个优化问题中,我能够估计一个“接近”最优解的值 a,但“接近”取决于具体情况。

R 中是否有一个函数可以使用初始值a,而不需要预先指定函数优化的区间?

最佳答案

当你说你不确定下限时,我怀疑这意味着你试图估计的参数没有下限。

如果是这种情况,一个技巧是转换函数,使参数有一个下限。

这个平凡的函数在 x=4 处有一个最小值:

fun <- function(x) -exp(-(x - 4)^2) + 8

我们可以通过以下方式找到:

optimize(f=fun,interval=c(0,8))
#> $minimum
#> [1] 4

但让我们假装一下,我们不确定是否有下限,但我们知道上限是 8。如果我们尝试,R 会抛出一个错误:

optimize(f=fun,interval=c(-Inf,8))

因为边界必须是有限的。在这种情况下,我们可以使用映射的指数变换 (exp())实数到正数,像这样:

optimize(f=function(x)fun(log(x)),
interval=exp(c(-Inf,8)))
#> $minimum
#> [1] 54.59815

然后要获取根,您只需通过以下方式对上述解决方案进行反向转换:

log(54.59815)
#> 4

如果您不知道基础参数的上限或下限,则可以使用对数比值转换代替 log():

function(x) log(x/(1-x))

它是 exp() 的倒数:

function(y) exp(y)/(1 + exp(y))

请注意,log-odds 转换将实数映射到单位区间,因此区间参数变为 0:1

这些解决方案确实有一些数值限制(例如,如果我们在第一个解决方案中设置了 interval=exp(c(-Inf,16)),我们就会得到一个错误)。提示,您可以重新缩放这些转换以围绕给定点 a 中心,这可以减少数值限制。

关于R:一维优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com