[英]Combine a dataframe and a list of dataframes into a one-dimensional list of dataframes, 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.