Scipy:使用optimize.leastsq时拟合参数的边界

6 投票
3 回答
8993 浏览
提问于 2025-04-17 02:15

我正在使用 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)

撰写回答