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