2012-03-01 59 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

関連する問題