0

LMFIT を使用してモデルを適合させようとしています。次の操作を簡単に実行できます。

def loss_function(params):
  residuals = []
  for x, measured in ...:
     y = predict(x, params)
     residuals.append(y - measured)
  return residuals

params = Parameters()
params.add(...)

model = Minimizer(loss_function, params)
result = model.minimize(method='leastsq')

そして、非常に合理的な結果を得る

ここで、measured変数に関連する不確実性 (測定誤差など) もあるため、それに関連する標準誤差によって残差のポイントに重みを付けたいと思います (常に測定値の 20% であると仮定します)。コードは次のようになります。

def loss_function(params):
  residuals = []
  for x, measured in ...:
     y = predict(x, params)
     residuals.append((y - measured) / (measured * 0.2))
  return residuals

params = Parameters()
params.add(...)

model = Minimizer(loss_function, params)
result = model.minimize(method='leastsq')

問題は、まったく信頼できないフィッティング結果が得られることです。なんで?どうすればこれを修正できますか?

4

1 に答える 1

0

「まったく信頼できない」の性質は何ですか?おそらく、データの不確実性が厳密に正であることを望むでしょう。使用するとmeasured* 0.2、負の値またはゼロを許容できます。残差に NaN または Infs がある場合、近似はうまく機能せず、ほぼ確実にパラメーター値が開始値のままになることに注意してください。

fcn_argsFWIW、引数 to を使用して、引数を目的関数 (測定、不確実性など) に渡すことができますMinimizer

于 2016-06-15T02:24:15.773 に答える