簡體   English   中英

R:一維優化

[英]R: one-dimensional optimization

我想使用optimize()或類似的東西來搜索函數的最小值/最大值。 但是,我不確定應該優化函數的確切范圍,這是函數'optimze()'的必需參數(例如, optimize(f=FUN,interval=c(lowerBound,upperBound)) )。

在這個優化問題,我能估計值a是“接近”最優解,但“接近性”視情況而定。

R中是否存在可以使用初始值a的函數,而該初始值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-odds轉換代替log()

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

它與exp()相反:

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

請注意,對數奇數轉換將實數映射到單位間隔,因此interval參數變為0:1

這些解決方案確實有一些數值上的限制(例如,如果在第一個解決方案中設置了interval=exp(c(-Inf,16)) ,我們將得到一個錯誤)。 提示,您可以重新縮放這些變換的比例,使其以給定點a為中心,這樣可以減少數值限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM