2017-10-06 7 views
0

私はscipy optimize関数を使用しており、カスタム最小化関数を提供しています。私は、この機能検査、特定の事前分布内のパラメータかどうか、それは非常に大きなカイ^ 2を返す必要がない場合 scipy.minimize最大戻り値

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

よう calc_chi2()機能が見え

result = op.minimize(calc_chi2, start_list, args=()) 
でミニマイザーを呼び出します。私はmath.infを使用していますが、最小化子はどこにでもパラメータベクトルを置くので、最小化子はmath.infを好まないと思いますか?私が大量の番号を使用していれば、すべて正常に動作します...私はちょうど正しいアプローチがここにあるのだろうかと思っていますか?

答えて

0

無限のカイ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

しかし、無限のχ2を返すのは私です...私はそれを捕まえる必要はありませんか?パラメータが前の値より大きい場合、私はちょうど大きなchi^2でハードコーディングするよりも優れたソリューションを探しています... – carl

+0

無限のカイが発生したときに何をしたいのか説明できますか? – charlesreid1

+0

私は最小化アルゴリズムでこのパラメータセットが以前のものではないことを知り、尤度がゼロでなければならないので、無限のchi^2を返しています – carl