web-dev-qa-db-ja.com

多くのパラメーターで関数を最大化する(python)

まず、私は科学的な数学や統計の経験が不足していると言わせてください。これは非常によく知られている問題かもしれませんが、どこから始めればよいのかわかりません。

関数f(x1, x2, ..., xn)があり、xを推測して、fの最大値を見つける必要があります。この関数には次のプロパティがあります。

  • 総数またはパラメータは通常約40から60であるため、力ずくのアプローチは不可能です。

  • 各xの可能な値は0.01から2.99の範囲です

  • 関数は安定しています。つまり、f値が高いほど、パラメーターの推測が優れていることを意味し、その逆も同様です。

これまでのところ、Pythonでかなり基本的なメソッドを実装しました。最初にすべてのパラメーターを1に設定し、新しい値をランダムに推測して、fが以前よりも高いかどうかを確認します。そうでない場合は、前の値にロールバックします。 10,000回の反復を伴うループでは、これはどういうわけか機能しているように見えますが、結果はおそらく完璧にはほど遠いものです。

最適なパラメータの検索を改善する方法についての提案をいただければ幸いです。この問題をグーグルで検索すると、MCMCにリンクするものが出てきましたが、それは非常に高度な方法のようであり、方法を理解するのにも多くの時間が必要です。基本的なヒントや概念は、手の込んだ方法やアルゴリズム以上のものに役立ちます。

13
David

自分でやらないでください。 SciPy をインストールし、その optimization ルーチンを使用します。 scipy.optimize.minimize ぴったりのようです。

Scipy.optimize( http://docs.scipy.org/doc/scipy-0.10.0/reference/tutorial/optimize.html )を見てみたいと思います。最大化は、-1 *関数の最小化です。

10
Jblasco

タスクでそれができないと言われない限り、リストを1つのパラメーターとしていつでも使用できます。リストはそれをはるかに簡単にします。

0
Chase Burnham