scipy leastsq fit - 惩罚某些解决方案
scipy leastsq fit - penalize certain solutions
我实现了一种能够同时拟合多个数据集的算法。它基于此解决方案:multi fit
目标函数太复杂,这里无法展示(LaFortune散点模型),所以我将使用解决方案中的目标函数进行解释:
def lor_func(x,c,par):
a,b,d=par
return a/((x-c)**2+b**2)
如果拟合算法选择了导致 lor_func < 0
.
的参数集 par
,我该如何惩罚它?
从数学的角度来看,目标函数的负值是有效的。所以导致这个负目标函数的参数集par
可能是误差最小的解。但我想排除这样的解决方案,因为它们在物理上也无效。
函数如:
def lor_func(x,c,par):
a,b,d=par
value = a/((x-c)**2+b**
return max(0, value)
不适用于 returns 错误数据,因为它也优化了 0 值。结果将与正确的结果不同。
使用 scipy.optimize.least_squares 的 bounds
参数?
res = least_squares(func, x_guess, args=(Gd, K),
bounds=([0.0, -100, 0, 0],
[1.0, 0.0, 10, 1]),
max_nfev=100000, verbose=1)
就像我在这里做的那样:
Suggestions for fitting noisy exponentials with scipy curve_fit?
我实现了一种能够同时拟合多个数据集的算法。它基于此解决方案:multi fit
目标函数太复杂,这里无法展示(LaFortune散点模型),所以我将使用解决方案中的目标函数进行解释:
def lor_func(x,c,par):
a,b,d=par
return a/((x-c)**2+b**2)
如果拟合算法选择了导致 lor_func < 0
.
par
,我该如何惩罚它?
从数学的角度来看,目标函数的负值是有效的。所以导致这个负目标函数的参数集par
可能是误差最小的解。但我想排除这样的解决方案,因为它们在物理上也无效。
函数如:
def lor_func(x,c,par):
a,b,d=par
value = a/((x-c)**2+b**
return max(0, value)
不适用于 returns 错误数据,因为它也优化了 0 值。结果将与正确的结果不同。
使用 scipy.optimize.least_squares 的 bounds
参数?
res = least_squares(func, x_guess, args=(Gd, K),
bounds=([0.0, -100, 0, 0],
[1.0, 0.0, 10, 1]),
max_nfev=100000, verbose=1)
就像我在这里做的那样: Suggestions for fitting noisy exponentials with scipy curve_fit?