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