2016-12-20 6 views
1

私はモデルの最適化されたパラメータを見つけることに興味があります(モデルの出力を既知の値で最小化することによって)。私が探しているパラメータには限界があり、1 - sum(x_par) >= 0のような不等式によっても制約されています。ここで、x_parは、合計パラメータリストのうちいくつかのパラメータのリストです。私はscipy.optimize.minimizeを使用して、さまざまな方法(たとえばCOBYLAおよびSLSQPなど)でこの問題を最小限に抑えましたが、この機能によるフィッティングのパフォーマンスは非常に悪く、エラーは一般に50%を超えています。制約のある最適化をscipy.optimize.minimizeに変える?

私は、scipy.optimize.curve_fitscipy.optimize.differential_evolutionが与えられた値のフィッティングに関して非常にうまく動作することに気付きましたが、これらの関数はパラメータに制約を与えません。私は、パラメータを制約することを可能にし、与えられた曲線/値をフィッティングするより良い仕事をscipy.optimize.minimizeよりも行うことができる、私の問題を最適化するためのpythonの代替案を探しています。

答えて

1

lmfitが便利です。このモジュールは、Parameterのすべての変数を固定または空き、境界が適用されている、または数学的表現として制約されているオブジェクトに置き換える、scipy.optimizedルーチンの多くのラッパーです(leastsqdifferential_evolution、ほとんどのスケーラーミニマイザーを含みます)。他のパラメータは、すべて最小化問題を解くために使用された方法とは独立しています。 Modelクラスもあり、多くのカーブフィッティングの問題をサポートし、パラメータの信頼区間の解析を改善します。

いくつかの注意を払って、 http://lmfit.github.io/lmfit-py/constraints.html#using-inequality-constraintsで簡単に説明するように、不等式制約を適用できます。

+0

(オブジェクトを使用して)ウェイのパラメータが定義されていると、多数のパラメータを最適化する必要がある問題に対してこのパッケージが不適切になるのではないかと思いますか?たとえば、問題を最適化するために必要なパラメータの数は事前にわかっていますが、多数のパラメータの点で複雑なため、オブジェクトを介して各パラメータの定義を指定することはできません。その意味で、 'scipy.optimize.minimize'は入力パラメータが' x1、..xn = x [0]、... x [n] 'として展開できるので柔軟です。 – Pupil

+0

lmfitはscipy.optimizeをラップするので、同じような複雑な問題も処理できるはずです。 Lmfitは、順序付けされた辞書にパラメータを保持するので、インデックスに意味を割り当てる必要はありません。これはわずかなメリットのように思えるかもしれませんが、目的関数を書き直すことなく、パラメータを変化から固定に簡単に切り替えることができます。しかし、あなたが望むなら、あなたはパラメータ "1"、 "2"、.....)の名前をつけることができます –

+0

こんにちは...どのように制約を実装することができます1合計(x_par)> = 0'?あなたが提供したリンクに示唆されている不平等制約の一般的な会計方法である、式を通じてどのように総額関数を会計処理できるかはわかりません。ありがとう。 – Pupil

関連する問題