r - 自动尝试优化其他初始值

标签 r optimization error-handling

我使用optim(.)尝试找到某些函数fn(dat, par, out=FALSE)的最佳拟合参数,其中par必须是两个元素的 vector ,而out确定输出格式。我用

optim(par=c(1,1), fn, dat=dat)

以确定最合适的par值。根据dat中的数据,这要么起作用,要么抛出错误,
function cannot be evaluated at initial parameters

据我了解,optim(.)需要不同的起始值。我的问题是,我将该函数并行应用于许多数据集,并且想知道是否确实需要手动尝试不同的值,或者是否有某种方法可以按照
if no error then great
if error try par=c(0.5,1)
if no error then great
if error try par=c(0.5,0.5)
...

最佳答案

您可以在开始之前运行网格搜索并丢弃NA参数。这是一个例子。

测试功能:

fn <- function(x) {
    if (x[1] < 0)
        NA
    else
        prod(x)
}

现在运行网格搜索。
library("NMOF")    
res <- gridSearch(fn,
                  npar = 2,   ## length of x
                  lower = -1, ## lower bound for x
                  upper = 3,  ## upper bound for x                
                  n = 5)      ## number of levels per element in x
## 2 variables with 5, 5 levels: 25 function evaluations required.

该函数向您显示它尝试的所有参数组合。
res$levels
## [[1]]
## [1] -1 -1
## 
## [[2]]
## [1]  0 -1
## 
## [[3]]
## [1]  1 -1
##
##  ....

并提供与这些组合相关的目标函数值。
res$values
##  [1] NA  0 -1 -2 -3 NA  0  0  0  0 NA  0  1  2  3
## [16] NA  0  2  4  6 NA  0  3  6  9

## => many objective functions values are NA

最好的(none- NA)解决方案:
res$minlevels 
## [1]  3 -1

## => your starting value for optim:
##
##    optim(gridSearch(fn, npar = 2,
##                     lower = -1, upper = 3, n = 5)$minlevels,
##          fn, dat = dat)

当然,这不能保证您至少找到一个none-NA vector ,但是机会可能会增加。

关于r - 自动尝试优化其他初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086657/

相关文章:

java - 如何使用NIO优化jetty web应用程序?

qt - QT中的错误查找

error-handling - pcall()忽略os.execute()错误

r - 在dplyr tbl_df中删除列的最佳实践

python - 将计算值元素添加到多维 numpy 数组的快速方法

php - 我该如何优化这个简单的脚本?

error-handling - 捕获测试异常

r - 使用替代获得参数名称

r - iGraph - k-core 的 graph.coreness 低估了一些核心

r - 比较 R 包的开发版本