#python #scipy #curve-fitting
#python #scipy #подгонка кривой
Вопрос:
Я использую scipy.optimize.curve_fit для подгонки сигмоидальной кривой к данным. Мне нужно связать один из параметров из [-3, 0.5] и [0.5, 3.0]
Я попробовал подгонку кривой без границ, а затем, если параметр меньше нуля, я снова подгоняю границы [-3, 0.5] и, наоборот, [0.5, 3.0]
Возможно ли связать функцию curve_fit с двумя интервалами?
Комментарии:
1. Я не думаю, что можно связать параметры с
curve_fit
помощью, но вас может заинтересовать пакет lmfit, который предоставляет именно эту функциональность.2. Я говорил слишком оптимистично — теперь, когда я думаю об этом, нет прямого способа наложить ограничение на два интервала
lmfit
. Возможно, вы можете попытаться создать два зависимых параметра, где один масштабируется на коэффициент-1
от другого?
Ответ №1:
Нет, least_squares (следовательно, curve_fit) поддерживает только ограничения box.
Ответ №2:
Существует грубый способ сделать это, и он заключается в том, чтобы ваша функция возвращала очень большие значения, если параметр находится за пределами нескольких границ. Например:
sigmoid_func(x, parameters):
if parameter outside multiple bounds:
return 1.0E10 * len(x) # very large number
else:
return sigmoid value
Это приводит к очень большим ошибкам, если параметр находится за пределами ваших множественных границ. Если у вас есть диапазон с одной границей [upper, lower], вам не следует использовать этот метод, поскольку самая последняя версия scipy уже поддерживает более распространенный тип проблемы с одним ограниченным диапазоном.