簡體   English   中英

Scipy。優化Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM