SciPy全局最小曲线拟合

Gus*_*Gus 6 python simulated-annealing scientific-computing curve-fitting scipy

我正在使用scipy.optimize.curve_fit,但我怀疑它正在收敛到局部最小值而不是全局最小值.

我尝试以下列方式使用模拟退火:

def fit(params):
 return np.sum((ydata - specf(xdata,*params))**2)

p = scipy.optimize.anneal(fit,[1000,1E-10])
Run Code Online (Sandbox Code Playgroud)

specf我试图适应的曲线在哪里.p尽管结果显然比返回的最小值更差,curve_fit即使返回值表明已达到全局最小值(参见退火).

如何改善结果?SciPy中是否有全球曲线钳工?

nil*_*ils 6

你是对的,它只会收敛到局部最小值(当它收敛时),因为它使用了Levenburg-Marquardt算法.SciPy中没有全局曲线拟合器,您必须使用现有的全局优化器自己编写.但要注意,这仍然不必收敛到你想要的价值.在大多数情况下,这是不可能的.

改善结果的唯一方法是很好地猜测起始参数.