【问题标题】:Do parameter values get passed to secomd minimizer call in lmfit是否将参数值传递给 lmfit 中的 secomd 最小化调用
【发布时间】:2020-07-22 01:19:20
【问题描述】:

我正在使用 lmfit 将一些数据拟合到两个反应系统中,以估计速率常数。我的数据是 x1 -> x2 -> x3 中 x1、x2 和 x3 物种浓度的变化

在其他工具中,我通常使用全局优化器,然后使用本地优化器,这样我可以更轻松地访问 Hessian 等。在 lmfit 中,我认为我可以执行以下操作:

minimizer = lmfit.Minimizer(self._residuals, params)
result = minimizer.minimize(method='differential_evolution')
result = minimizer.minimize(method='leastsqr')

我假设差分进化拟合的参数将保留在最小化对象中,并被第二个最小化函数调用自动拾取。

但是,我不确定,因为我的同事另有建议。如果有人更了解 lmfit 包,第二个最小化是否会拾取第一个最小化停止的参数?

更新 1:我添加了 Minimize 调用以确保只创建一个 Minnizmize 对象。我当前的测试似乎表明参数值确实从一个最小化调用传递到另一个(这是我所期望的)。

更新 2:进一步的实验表明,如果系统无法识别,则存在差异,这意味着第一次最小化调用似乎没有将其拟合参数传递给第二次最小化调用。

【问题讨论】:

    标签: python lmfit


    【解决方案1】:

    不,第一种方法的拟合参数不会用于您提供的代码的第二次最小化。

    如果您没有为 minimizer.minimize() 指定任何内容,它将从您提供的用于初始化 Minimizer 类的 params 开始。下面的代码应该做你想做的:

    minimizer = lmfit.Minimizer(self._residuals, params)
    result_de = minimizer.minimize(method='differential_evolution')
    result = minimizer.minimize(params=result_de.params, method='leastsqr')
    

    (我在这里假设self._residuals 是您的拟合函数,即您想要最小化的函数)。请查看文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2013-02-15
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多