[英]Scipy.Optimize Python
我正在嘗試優化我建立的模型的參數。 它是一個非常簡單的基於模型的預測山水徑流的模型。 大學課程的一部分:
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
scipy.optimize.fmin_cg的第一個參數(在代碼中為model
應表示您要最小化的函數( 與給定的參數值相比,給定的參數估計的模型誤差估計為 ...) 。
具體來說,它應該是一個返回標量值的函數。
該算法需要知道模型在給定的一組參數下的性能如何。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.