lmfit 中的最小化函数允许使用关键字 iter_cb 指定每次迭代调用的函数。这个函数被称为每个函数评估(所以不是最小二乘过程中的每次迭代)。我想要做的是在参数更新后每次迭代最小二乘过程调用一个函数。例如,使用 3 个参数,对残差进行 4 次评估以获得 3 个导数(4 个函数评估)。更新参数后,我需要在下一次迭代之前调用一个函数(再次进行 4 次函数评估)。那可能吗?
问问题
433 次
1 回答
0
好吧,答案有点“不”,因为底层编译代码(scipy.optimize.leastsq 使用MINPACK lmdif)在调用目标函数来估计有限差分雅可比之间没有区别。事实上,它并没有真正计算估计解决方案的“迭代”,但它确实计算了函数评估的次数。
此外,它不会总是在值的更新之间进行 Nvars+1 函数评估。也就是说,通常会有 Nvars+1 次评估,但有时似乎是 Nvars+2 次评估(或者,1 次评估具有相当独特的值)。
您可以检查传递给迭代回调的“iter”(当前函数评估的计数),如果值不是您认为的值,则快速返回。或者,您可以检查自上次迭代回调实际完全运行以来这些值是否发生了显着变化。
于 2016-04-10T02:41:41.343 回答