参数值是否传递给 lmfit 中的第二个最小化器调用

Do parameter values get passed to secomd minimizer call in lmfit

我正在使用 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:进一步的实验表明如果系统不可识别,则存在差异,这意味着第一次最小化调用似乎不会将其拟合参数传递给第二次最小化调用。

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

如果您没有为 minimizer.minimize() 指定任何内容,它将从您提供的 params 开始,以初始化 Minimizer class。下面的代码应该可以满足您的需求:

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.