【问题标题】:How to evaluate the parameters estimation results from Optim Julia?如何评估 Optim Julia 的参数估计结果?
【发布时间】:2020-12-09 19:53:52
【问题描述】:

我试图估计几个 ODE 系统的参数以适应相同的数据集。 当我用估计的参数绘制一些模型的变量时,曲线与真实数据集非常吻合。 然而,这只是一种视觉欣赏。我想证明从 Julia 的 Optim 包中选择具有优化结果的最佳候选模型(ODE 系统)

为了估计模型的参数,我使用了以下代码:

prob  = ODEProblem(model,u_0,tspan,params);  
cost_functionEP = build_loss_objective(prob,Tsit5(),L2Loss(sub_t_norm,sub_norm_data),prob_generator = problemEP, maxiters=1000000,verbose = false, save_idxs = [1,4,12] )
result_estimEP  = Optim.optimize(cost_functionEP,lower,upper, params, Fminbox(BFGS()))

优化的输出,result_estimEP是:

 * Status: success

 * Candidate solution
    Final objective value:     2.830272e+05

 * Found with
    Algorithm:     Fminbox with BFGS

 * Convergence measures
    |x - x'|               = 2.17e-19 ≰ 0.0e+00
    |x - x'|/|x'|          = 1.30e-21 ≰ 0.0e+00
    |f(x) - f(x')|         = 0.00e+00 ≤ 0.0e+00
    |f(x) - f(x')|/|f(x')| = 0.00e+00 ≤ 0.0e+00
    |g(x)|                 = 2.12e+07 ≰ 1.0e-08

 * Work counters
    Seconds run:   26  (vs limit Inf)
    Iterations:    6
    f(x) calls:    10034
    ∇f(x) calls:   10034

我阅读了 Optim 的在线文档以了解此输出的每一行的含义,但没有太多信息(仅用于单变量估计)。请比我更熟悉优化问题的人指出这些值的含义吗?

【问题讨论】:

    标签: optimization parameters julia inference


    【解决方案1】:

    一些可能有帮助的 cmets:

     * Status: success # the optimization was successful
    
     * Candidate solution
        Final objective value:     2.830272e+05 # the loss function value at the end
    
     * Found with
        Algorithm:     Fminbox with BFGS # the algorithm used
    
     * Convergence measures
        |x - x'|               = 2.17e-19 ≰ 0.0e+00 # the conditions 
        |x - x'|/|x'|          = 1.30e-21 ≰ 0.0e+00 # that were satisfied
        |f(x) - f(x')|         = 0.00e+00 ≤ 0.0e+00 # or not. These are
        |f(x) - f(x')|/|f(x')| = 0.00e+00 ≤ 0.0e+00 # odd though, see comment.
        |g(x)|                 = 2.12e+07 ≰ 1.0e-08
    
     * Work counters
        Seconds run:   26  (vs limit Inf)
        Iterations:    6
        f(x) calls:    10034     # number of loss function calls
        ∇f(x) calls:   10034     # number of gradient of loss function calls
    

    在我看来,你唯一满足的条件本质上是f(x) == f(x'),这似乎很奇怪,这表明将x 更改为x' 不会影响损失函数,尽管梯度g(x) 不为零。也许损失函数有问题?也可能这是典型的 BFGS 算法?我不知道。然而,令人欣慰的是,梯度并没有满足条件(小于 1.0e-8),所以也许你已经有了一个很好的最小化器。

    【讨论】:

    • 非常有帮助!奇怪的结果可能是由于我决定限制的参数:大部分。在我的工作中,参数是按生物功能分类的。所以我限制每个行为的参数以突出它们的关键重要性。这可以解释为什么我的模型都没有完全解决损失问题。是的,初始最小化器接近估计值。
    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2017-08-11
    • 2022-11-30
    • 2020-06-06
    • 2014-10-13
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多