curve_fit中设置限制条件的两种方法
直接翻译, 相关链接
“bounds”参数
简单限制条件,简单限制参数范围。以下为机翻内容:
对拟合参数施加约束的一种简单方法是为每个参数定义上限和下限。这可以使用curve_filt中的bounds参数来实现。让我们考虑一个示例,其中我们希望将param1的值限制在0和1之间:
bounds = ([0], [1])
params, params_covariance = curve_fit(func, x_data, y_data, p0=[initial_guess], bounds=bounds)
通过将下限设置为0,将上限设置为1,我们可以确保param1的拟合值在指定范围内。
限制函数(已被逆向更新,已无效)
复杂限制条件,通过函数限制参数范围。以下为机翻内容:
在某些情况下,简单的边界可能不够,我们需要更复杂的约束。SciPy提供了约束模块,它允许我们定义自定义约束函数。这些函数指定参数必须满足的条件。
假设我们有一个约束,param1+param2必须小于或等于10。我们可以定义一个约束函数如下:
from scipy.optimize import NonlinearConstraint
def constraint(params):
param1, param2 = params
return param1 + param2 - 10
# Create the constraint object
nonlinear_constraint = NonlinearConstraint(constraint, -np.inf, 0)
# Perform the curve fitting with the constraint
params, params_covariance = curve_fit(func, x_data, y_data, p0=[initial_guess1, initial_guess2], constraints=nonlinear_constraint)
在这里,我们定义了以参数为输入并返回约束方程值的约束函数。非线性约束对象是使用约束函数、下限(在这种情况下为-np.inf)和上限(在这种情形下为0)创建的。最后,我们使用constraints参数将constraint对象传递给curve_filt。