0

lmfit の最小化関数では、キーワード iter_cb を使用して反復ごとに呼び出される関数を指定できます。この関数は、関数評価ごとに呼び出されます (したがって、最小二乗法プロセスのすべての反復ではありません)。私がやりたいことは、パラメーターが更新された後、最小二乗プロセスの反復ごとに関数を呼び出すことです。たとえば、3 つのパラメーターの場合、残差は 4 回評価され、3 つの導関数 (4 つの関数評価) が得られます。パラメータが更新された後、次の反復の前に関数を呼び出す必要があります (再び 4 つの関数評価)。それは可能ですか?

4

1 に答える 1

0

基礎となるコンパイル済みコード (scipy.optimize.leastsq は MINPACK lmdif を使用) は目的関数を呼び出して有限差分ヤコビアンを推定することを区別しないという点で、答えは一種の「いいえ」です。実際、推定された解の「反復」は実際にはカウントされませんが、関数評価の数はカウントされます。

また、値の更新の間に常に Nvars+1 関数評価を行うというのは正しくありません。つまり、多くの場合、Nvars+1 の評価がありますが、Nvars+2 の評価 (または、かなりユニークな値を持つ 1 つの評価) の場合もあるようです。

反復コールバックに渡される "iter" (現在の関数評価のカウント) を確認し、値が想定どおりでない場合はすぐに戻ることができます。または、反復コールバックが実際に完全に最後に実行されてから、値が大幅に変更されたことを確認できます。

于 2016-04-10T02:41:41.343 に答える