2017-10-06 162 views
0

我正在使用scipy優化功能併爲其提供自定義最小化功能。我打電話跟scipy.minimize最大返回值

result = op.minimize(calc_chi2, start_list, args=()) 

calc_chi2()功能看起來像極小

def calc_chi2(parameters): 
    if within_priors(parameters): 
     # calculate chi2 
    else: 
     return math.inf 

此功能測試是否某些先驗內的參數,如果沒有它應該返回一個非常大的志^ 2。我使用math.inf,然而導致最小化者將參數向量設置爲nan,所以我猜最小值不喜歡math.inf?如果我只是使用大量數據,一切正常......我只是想知道這裏的正確方法是什麼?

回答

0

考慮拋出/捕獲一個異常來處理無限chi^2的情況 - 如果不是你描述的NaN行爲,並不清楚你期望會發生什麼,並且處理異常會讓你變得明確關於你想要發生什麼。

class InfiniteChiException(Exception): 
    """This exception is raised under certain conditions, yadda yadda yadda""" 
    pass 

def calc_chi2(parameters): 
    if within_priors(parameters): 
     # calculate chi2 
    else: 
     raise InfiniteChiException 

try: 
    result = op.minimize(calc_chi2, start_list, args=()) 
catch InfiniteChiException: 
    # do something here 
+0

但它是我誰返回無限的chi^2我不需要捕捉那個?我只是尋找一個更好的解決方案,而不僅僅是一個很大的chi^2中的硬編碼,如果參數超出了先前的範圍... – carl

+0

你能解釋一下當無限chi發生時你想要發生什麼嗎? – charlesreid1

+0

因爲我想要最小化算法知道這個參數集在先驗之外,因此應該有零可能性 – carl