0

構築したモデルのパラメーターを最適化しようとしています。山の水の流出を予測する非常に単純なモデルに基づいています。大学の授業の一部:

def model(params, snowProportion,temperature):
    '''
    Calculates predicted runoff.
    '''
    K = params[0]
    p = params[1]
    tempThresh = params[2]
    meltDays = np.where(temperature > tempThresh)[0]
    accum = snowProportion*0.
    for d in meltDays:
        water = K * snowProportion[d]
        n = np.arange(len(snowProportion)) - d
        m = p ** n
        m[np.where(n<0)]=0
        accum += m * water
    np.savetxt('2005predicted.dat', accum)

params = [2000, 0.96, 9]

scipy.optimize.fmin_cg; を使用するように言われました。

だから私は次の行に沿って何かをすると思います:

x = scipy.optimize.fmin_cg(model, params, args=[snowProportion, temperature])

次の行に沿ってエラーが発生し続けます。

TypeError: 'numpy.ndarray' object is not callable

それで、それらをリストに入れる必要があると思いましたが、同じ問題が発生しました:

TypeError: 'list' object is not callable

パラメータのより良い見積もりを取得したい。雪の割合と気温は (365,) の形をしています

RMSE:

numpy を np としてインポート scipy.optimize をインポート

def RMSE(params,temperature, snowProportion):
    '''
    Calculates the RMSE of a model from measured and predicted.
    '''
    measured = np.loadtxt('/home/david/Documents/HydroM/runoff2005.dat')
    K = params[0]
    p = params[1]
    tempThresh = params[2]
    meltDays = np.where(temperature > tempThresh)[0]
    predicted = snowProportion*0.
    for d in meltDays:
        water = K * snowProportion[d]
        n = np.arange(len(snowProportion)) - d
        m = p ** n
        m[np.where(n<0)]=0
        predicted += m * water
    err = np.sqrt((measured - predicted) ** 2).mean()
    return err
4

1 に答える 1

0

scipy.optimize.fmin_cgへの最初の引数 (コードで名前が付けられmodelています) は、最小化したい関数を表す必要があります (おそらく、参照値と比較した、指定された一連のパラメーターを使用したモデルの推定誤差...)。
具体的には、スカラー値を返す関数である必要があります。
アルゴリズムは、モデルが特定のパラメーターのセットでどの程度「うまく」機能するかを知る必要があります。

于 2013-01-01T15:31:22.467 に答える