私はこの質問がStackOverflowや他の場所でより適しているかどうかはわかりませんが、プログラミングだけであるのか、理解する必要があります。話題以外の場合、私は謝罪します。単一のパラメータを最適化してモデルと観測の違いを最小限にする
Pythonでは、私はかなり単純なモデルを作成しています。配列x
、いくつかの係数c1
、c2
など、最適化したいパラメータP
をとる関数です。 パラメータP
を変更して測定値とモデル値の差を最小限に抑え、結果として得られるパラメータ(スカラー)とその結果のモデルと測定値(配列)の差を出力したいと思います。
私はしばらくの間、scipy.optimize.minimize
documentationを勉強していましたが、私はそれを取得していないようです。特に、私は理解しません:
- Pのみが変更されるように最小化を入力するスカラー関数を定義する方法。
- この場合、どの最小化方法が最適なのですか(私は最小二乗を仮定しましたが、ドキュメントを見ると他の方法がたくさんあるので、他の方法が推奨されていれば、そのオプションただし、勧告には説明が付属していなければならない。 (最適化の結果は全体としてPythonオブジェクトであるようだと、私は上記の非常に特定の出力をしたい)
- はどうやって所望の出力を得るのですか
例:
import numpy as np
array1 = np.random.rand(10)
array2 = np.arange(5.,55,5)
from scipy.optimize import minimize
def model(c1, c2, c3, x, P):
modelY = x*c1 + c2*x*P + c3 # some random function for which I need to optimize P
return modelY
今私が欲しい最小限の関数がnp.abs(measured - modelY)
で、変更したい唯一のパラメータがmodel
関数の引数であるP
であり、測定データを最初の推測として使用する場合は、どの構文をscipy.optimize.minimize
と一緒に使うのですか?それとも、私はそれらを単一の機能に入れるべきですか?しかし、それ以外の関数の他の引数をすべて変更しないように指定するにはどうすればよいですか? そして、どのようにして差異を抽出し、結果として最小化結果からP
を得ますか?
私はプログラミングについての決定的な問題であると考えています(* 2を除く - 使用する方法は手元の問題に依存しており、おそらくプログラマが答えるものではありません)。しかし、私が必要とする情報は、このサイトとドキュメンテーションに散在していると確信しています。私は現時点で詳細な時間が不足していますが、まずは '' curve_fit'(https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy)を見てください。 optimize.curve_fit.html)を使用することができます。 – kazemakase
チップをありがとう!しかし、私はまだ 'curve_fit'で一つのスカラーを修正する方法と、結果として得られたスカラーを出力として返す方法を見ていません。 – durbachit
これはおそらくすべてドキュメントに記載されています(あなたの質問のいくつかは簡単です)。さらに完全なコードがなければ、それほど多くは定義されていないので、コードを表示することも難しいです。また、モデルの内部も最適化自体にとって重要です! – sascha