我正在使用为python实现的lmfit
库来进行最小二乘拟合。不幸的是,我不知道如何正确估计结果的收敛性。我目前所做的是从一些紧密的收敛参数集开始,并迭代地检查我的拟合参数。如果它们都为零,我会减少这些参数并再次运行(如下所示)。
conv=1E-13
out = lmfit.minimize(residual,out1.params,method='leastsq',xtol=conv,ftol=conv)
if out.params['a'].stderr == 0. or out.params['b'].stderr == 0.:
while out.params['a'].stderr == 0. or out.params['b'].stderr == 0.:
conv=conv*10.
out = lmfit.minimize(residual,out1.params,method='leastsq',xtol=conv,ftol=conv)
这往往有效,但我认为可以使用拟合函数的输出来完成相同的操作。即一个特殊变量,用于存储计算out.parmas.convergence = True
的输出状态。检查fit函数是否返回零也仅限于默认的leastsq
方法,因为其他选项(如least_squares
)在拟合失败时返回不同。我也关注lmfit
的输出。即它使用None
完成打印,这是一个输出变量太多,并且在我找到的在线参考中不存在。
[[Fit Statistics]]
# function evals = 16
# data points = 21
# variables = 2
chi-square = 11.408
reduced chi-square = 0.600
Akaike info crit = -8.815
Bayesian info crit = -6.726
[[Variables]]
a: 0.09022266 +/- 0.001054 (1.17%) (init= 0.09022267)
b: 1.49985526 +/- 1.28e-09 (0.00%) (init= 1.5)
[[Correlations]] (unreported correlations are < 0.100)
C(a, b) = -0.197
None
我很感激您的想法和建议。