Ограничение значений для curve_fit (scipy.optimize) - PullRequest
7 голосов
/ 01 марта 2012

Я пытаюсь вписать кривую логистического роста в мои данные, используя в качестве входного значения curve_fit, используя следующую функцию:

def logistic(x, y0, k, d, a, b):
    if b > 0 and a > 0:
        y = (k * pow(1 + np.exp(d - (a * b * x) ), (-1/b) )) + y0
    elif b >= -1 or b < 0 or a < 0:
        y = (k * pow(1 - np.exp(d - (a * b * x) ), (-1/b) )) + y0

    return y

Как вы видите, используемая мной функция имеет некоторые ограничения по значениямон может принимать параметры a и b.Есть предположения о том, как обрабатывать неправильные значения?Должна ли функция ввода вызывать исключение или возвращать фиктивное значение?Заранее спасибо.

1 Ответ

7 голосов
/ 01 марта 2012

Когда параметры выходят за пределы допустимого диапазона, возвращайте чрезвычайно большое число (вдали от данных, которые будут установлены). Это (мы надеемся) оштрафует этот выбор параметров настолько, что curve_fit установит оптимальный набор параметров, который будет оптимальным:

def logistic(x, y0, k, d, a, b):
    if b > 0 and a > 0:
        y = (k * pow(1 + np.exp(d - (a * b * x) ), (-1/b) )) + y0
    elif b >= -1 or b < 0 or a < 0:
        y = (k * pow(1 - np.exp(d - (a * b * x) ), (-1/b) )) + y0
    else:
        y = 1e10
    return y
...