2012-03-01 3 views
7

다음 함수를 입력으로 사용하여 curve_fit을 사용하여 데이터에 물류 증가 곡선을 맞추려고합니다.curve_fit (scipy.optimize)의 값 제한

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에서 허용 할 수있는 값에는 몇 가지 제한 사항이 있습니다. 잘못된 값을 처리하는 방법에 대한 추측은 무엇입니까? 입력 함수가 예외를 발생 시키거나 더미 값을 반환해야합니까? 미리 감사드립니다.

답변

7

매개 변수가 허용 범위를 벗어나면 거대한 숫자 (구형 데이터에서 멀리 떨어져 있음)를 반환합니다. 이것은 (희망) 최적으로 매개 변수의 다른 허용 세트 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 
+0

조금 더 잘 작동하는 것 같다, 감사합니다! 나는 그것을 조금 더 가지고 놀 것이다 ... – mgalardini