优化R中的不可微函数

时间:2018-01-10 00:53:03

标签: r optimization nonlinear-optimization

我正在尝试两种方法来最小化成本函数。第一个是optim(),第二个是优化包的optim_nm()部分。我面临的问题是我的错误函数有2个参数,

  1. 优化功能需要修改的变量参数列表
  2. 一组固定参数
  3. optim(par = variableParameters,fn = error_function,par2 = fixedParameters):

    optim处理这个很好,因为第一个参数是变量参数,函数然后是一组可选参数,我可以传递固定参数。但是,这个功能很慢。

    optim_nm(fun = error_function,k = 5,start = variable_parameters)

    optim_nm,允许我调整优化函数,但是,我不确定如何传递固定参数。文档中的所有示例都带有可变参数。

    这两种方法都实现了Nelder和Mead算法,该算法对于我所要求的不可区分的错误函数是健壮的。如果有其他软件包快速执行此操作,请同时提及它们!

    如果有人使用过这个,或者可以更好地解释文档,我可以使用你的帮助。

    optim_nm Documentation

    optim documentation

1 个答案:

答案 0 :(得分:2)

创建一个填充固定参数值的包装函数:

sub_ids = ["2ypash", "7ocvlb", "7okxkf"]
commentlist = []

for sub_id in sub_ids:

    submission = reddit.submission(id=sub_id)
    submission.comments.replace_more(limit=None, threshold=0)
    comments = submission.comments.list()

    for comment in comments:

        commentsdata = {}
        commentsdata["id"] = comment.id
        commentsdata["subreddit"] = str(submission.subreddit)
        commentsdata["thread"] = str(submission.title)
        commentsdata["author"] = str(comment.author)
        commentsdata["body"] = str(comment.body)
        commentsdata["score"] = comment.score
        commentsdata["created_utc"] = datetime.datetime.fromtimestamp(comment.created_utc)
        commentsdata["parent_id"] = comment.parent_id

        commentlist.append(commentsdata)

如果评估error_function <- function(variableParameters, fixedParameters) { ... } wrapper <- function(x) { error_function(x, fixedParameters = 3) } optim_nm(fun = wrapper, k = 5, start = initial_parameter_values) 费用昂贵,您可能需要使用error_functionrBayesianOptimization个套餐来查看贝叶斯优化。