2012-03-08 9 views
1

私はscipy.optimize.optimizeの関数のいくつかに精通しており、かつては微分を知っていた関数を最小限に抑えるためにfmin_cgを使っていました。しかし、私は今、容易に差別化されない式を持っています。派生のないPython関数の最小化

このモジュールの関数(fmin_cgなど)のいくつかは、実際には派生物を提供する必要はありません。私は順番に各パラメータに小さな値を加えることでクォージー・デリバティブを計算すると仮定します - それは正しいですか?

私の主な質問は次のとおりです。与えられた派生物のない複数のパラメータに対して関数を最小化するときに、どの関数(または他の関数)を使うのが最適でしょうか?

+0

あなたがについて正しいです導関数(ヤコビアン)を数値的に近似する方法。私は 'scipy.optimize.leastsq'を使ってこれを見てきました。 – wim

+0

ちょうど興味深いですが、いくつの変数がありますか? – denis

答えて

3

それを混同しないでください。
あなたのアプリケーションに最適なのはどちらですか? は、あなたの機能がどのくらい滑らかで、何個の変数があるかに大きく依存しています。
プレーンNelder-Mead、fminは、最初の良い選択です。 残念ながら、scipy Nelder-Meadは、xのスケールに関係なく、固定サイズのシンプレックス(.05/.00025)から始まります。

私はscipy.optimize.tncfmin_tncが良好であることを聞いた:

fmin_tnc(func, x0, approx_grad=True, epsilon=.001 ...) or 
fmin_tnc(func_and_grad, x0 ...) # func, your own estimated gradient 

(fmin_tncがバウンド制約、何が起こっているかを見るために素敵なメッセージ、多少異なる引数を持つ〜fmin_ncgです。)

3

私はSciPyで利用できるものに慣れていませんが、Downhill Simplexメソッド(別名Nelder-MeadまたはAmoebaメソッド)は多次元最適化でよく機能します。

を見ると、method='Nelder-Mead'引数を使用してminimize()関数のオプションとして利用できるようです。

(func(x + epsilon I) - func(x))/epsilonによってxでの勾配を推定

fmin_xx(func, x0, fprime=None, epsilon=.001 ...) 

として fmin_bfgs fmin_cg fmin_powellのいずれかを呼び出して、はい...線形計画のためのシンプレックス(ダンツィーク)アルゴリズムで

+0

また、[fmin](http://docs.scipy.org/doc/scipy-0.10.1/reference/generated/scipy.optimize.fmin.html#scipy.optimize.fmin)関数 –

関連する問題