5

scipy で使用される適合アルゴリズムについて質問があります。私のプログラムでは、y エラーのみの x および y データ ポイントのセットがあり、関数を当てはめたいと考えています。

f(x) = (a[0] - a[1])/(1+np.exp(x-a[2])/a[3]) + a[1]

それに。

問題は、2 つのフィット scipy フィット ルーチン scipy.odr.ODR (最小二乗アルゴリズムを使用) と scipy.optimize を使用して、パラメーターにとてつもなく高いエラーが発生し、フィット パラメーターにも異なる値とエラーが発生することです。私の例を挙げます:

scipy.odr.ODR に適合、fit_type=2

Beta: [ 11.96765963 68.98892582 100.20926023 0.60793377]
Beta Std Error: [ 4.67560801e-01 3.37133614e+00 8.06031988e+04 4.90014367e+04]
Beta Covariance: [[ 3.49790629e-02 1.14441187e-02 -1.92963671e+02 1.17312104e+02]
[ 1.14441187e-02 1.81859542e+00 -5.93424196e+03 3.60765567e+03]
[ -1.92963671e+02 -5.93424196e+03 1.03952883e+09 -6.31965068e+08]
[ 1.17312104e+02 3.60765567e+03 -6.31965068e+08 3.84193143e+08]]
Residual Variance: 6.24982731975
Inverse Condition #: 1.61472215874e-08
Reason(s) for Halting:
Sum of squares convergence

次に、scipy.optimize.leastsquares との適合:

scipy.optimize.leastsq に適合

beta: [ 11.9671859 68.98445306 99.43252045 1.32131099]
Beta Std Error: [0.195503 1.384838 34.891521 45.950556]
Beta Covariance: [[ 3.82214235e-02 -1.05423284e-02 -1.99742825e+00 2.63681933e+00]
[ -1.05423284e-02 1.91777505e+00 1.27300761e+01 -1.67054172e+01]
[ -1.99742825e+00 1.27300761e+01 1.21741826e+03 -1.60328181e+03]
[ 2.63681933e+00 -1.67054172e+01 -1.60328181e+03 2.11145361e+03]]
Residual Variance: 6.24982904455 (calulated by me)

My Point は 3 番目の適合パラメーターです。結果は次のとおりです。

scipy.odr.ODR、fit_type=2: C = 100.209 +/- 80600

scipy.optimize.leastsq: C = 99.432 +/- 12.730

なぜ最初のエラーがこれほど高いのかわかりません。さらに良いことに、エラーのあるまったく同じデータ ポイントを Origin 9 に入れると、C = x0 = 99,41849 +/- 0,20283 が得られます。

再びまったく同じデータを c++ ROOT Cern C = 99.85+/- 1.373 に

ROOT と Python でまったく同じ初期変数を使用しましたが。オリジンは必要ありません。

なぜこれが起こるのか、そしてどれが最良の結果なのか、何か手がかりはありますか?

ペーストビンにコードを追加しました:

助けてくれてありがとう!

編集:SirJohnFranklinsの投稿に関連するプロットは次のとおりです。以下のコメントを参照してください

4

2 に答える 2

0

(悲しいことに、もっと評判が必要なので、フィット感をアップロードできません。プロットをキャプテン サンドイッチに渡して、彼がアップロードできるようにします。)

私はスレッドを立ち上げた人と同じワークグループに属していますが、このプロットを作成したのは私です。

前回はそれほど遠くなかったので、データに x-errors を追加しました。ODR で得られたエラーは依然として非常に高い (ベータ [2] で 4.18550164e+04)。プロットでは、[ROOT Cern][2] の FIT が x と y の誤差とともに与えるものを示しています。ここで、x0 は beta[2] です。

赤と緑の曲線は異なるベータを持ち、左の曲線は ROOT によって得られた 3.430 の適合誤差を引いたもので、右の曲線は誤差を加えたものです。これは、Origin 9 の適合によって得られる 0.2 の誤差 (これは y 誤差のみを処理できると思います) や、x と y も含む ODR によって得られる約 40k の誤差よりもはるかに理にかなっていると思います。エラー。

おそらく、ROOT は非常に堅牢なフィッティング アルゴリズムを必要とする天体物理学者によって主に使用されるため、はるかに難しいフィッティングを処理できますが、フィッティング アルゴリズムの堅牢性については十分に知りません。

于 2013-06-29T14:51:58.080 に答える