Scipy:使用optimize.leastsq时拟合参数的边界
我正在使用 optimize.leastsq 来拟合数据。我想把拟合的参数限制在一个特定的范围内。请问在使用 optimize.leastsq 的时候,可以定义参数的范围吗?虽然在 optimize.fmin_slsqp 中可以设置范围,但我更想用 optimize.leastsq。
3 个回答
0
你可能会觉得这个链接
https://lmfit.github.io/lmfit-py/
对你有帮助。它可以为每个变量设置上下限,并且可以在参数之间设置代数约束。
3
我刚刚发现这个东西。
http://code.google.com/p/nmrglue/source/browse/trunk/nmrglue/analysis/leastsqbound.py
它使用参数转换来施加盒子约束。它还计算了参数估计的调整协方差矩阵。
这个是BSD许可证的,不过我还没试过。
6
我觉得处理边界的标准方法是,当参数超过限制时,让需要最小化的函数(也就是残差)变得非常大。
import scipy.optimize as optimize
def residuals(p,x,y):
if within_bounds(p):
return y - model(p,x)
else:
return 1e6
p,cov,infodict,mesg,ier = optimize.leastsq(
residuals,p_guess,args=(x,y),full_output=True,warning=True)