使用LMFIT中的不确定性进行误差加权拟合

时间:2016-06-14 09:57:11

标签: python curve-fitting model-fitting lmfit function-fitting

我正在尝试使用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')

问题是现在我的拟合结果完全不可靠。为什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

"完全不可靠"的性质是什么?您可能希望数据中的不确定性严格为正 - 使用measured* 0.2可能允许负值或零。请注意,如果残差中存在NaN或Infs,则拟合将无法正常工作,并且几乎可以肯定将参数值保留为其起始值。

FWIW,您可以使用fcn_args Minimizer参数将参数传递给目标函数(用于测量,不确定性等)。