1

fmin関数で近似したい実験データがいくつかあります。私はすでに別のサンプルでfminを使用しましたが、すべて問題ありませんでした。

今回は、次のような関数でデータを表現します。

def f3(c,t):
    resultat=0
    test=t-c[0]
    if (test<0):
       resultat = c[1]
    else:
       resultat = c[1]+c[2]*(t-c[0])+c[3]*(t-c[0])*(t-c[0])+c[4]*(t-c[0])*(t-c[0])*(t-c[0])
    return resultat

tは時間ベクトルであり、c [0]はしきい値(多項式係数のc [i])です (ちなみに、データ例を生成するために使用したため、この関数でデータを表すことができます!)

関数エラーは次の式で与えられます:

def e3(p,temps,y):
    error = 0
    i=0
    for t in temps:
        error = error + (f3(p,t)-y[i])**2
        i=i+1
    #cont = min(0,p[0])
    #error = error +10000*(cont*cont)*(cont*cont*cont*cont)
    return error

p3 = [10,250,0,0,0]であり、T_outはベクトルです

フィッティング操作は次のとおりです。

p3_min = fmin(e3,p3[:], args=(temps,T_out),xtol=0.0001,ftol=0.0001)

この命令は、「古典的な」多項式関数では非常にうまく機能しますが、f3関数(「if」が含まれている)では、p3_minは期待どおりに最適化されていません。

p [0]> 0のような制約を実装するか、反復回数を増やしようとしましたが、期待値を取得できませんでした。

誰かが「しきい値」関数でデータを適合させようとしたことがありますか?助けていただければ幸いです。

4

1 に答える 1

0

最適化しようとしているしきい値関数は非線形性が高いため、fmin などの関数を使用して最適化するのははるかに困難です。

しきい値の値を推定するために分類ステップを実行しようとすると、運が良くなる場合があります。そして、最適化を実行するためにのみ、しきい値を知っています。

scikit Learn は、このようなタスクに最適なツールです。

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm

于 2012-07-18T13:41:08.683 に答える