Я использую scipy.optimize.curve_fit
, но подозреваю, что он сходится с локальным минимум, а не глобальный минимум.
Я пробовал использовать имитацию отжига следующим образом:
def fit(params):
return np.sum((ydata - specf(xdata,*params))**2)
p = scipy.optimize.anneal(fit,[1000,1E-10])
где specf
- кривая, которую я пытаюсь подогнать. Результаты в p
явно хуже, чем минимум, возвращаемый curve_fit
, даже когда возвращаемое значение указывает, что глобальный минимум был достигнут ( см. Отжиг ).
Как я могу улучшить результаты? Есть ли в SciPy средство для установки глобальной кривой?