Python lmfit:模型对象尝试使用 "self" 作为自由变量

Python lmfit: Model object trys to use "self" as free variable

我正在使用 Python 模块 "lmfit" 将函数拟合到某些数据。变量应该有约束,我想将拟合程序实施到现有框架中。这就是为什么 fit 函数必须是 class 方法。因此函数的第一个参数应该是 "self".

import lmfit

class foo(object):

  def __init__(self):
    self.x_data = range(10)
    self.y_data = range(10) + 2

  def fit_func(self, x, a, b):
    return a * x + b
  
  def fit_with_lmfit(self):
    model = lmfit.Model(self.fit_func, independent_vars=["x"])
    model.set_param_hint("a", 1)
    model.set_param_hint("b", 2)
    results = model.fit(self.y_data, x=self.x_data)
    return results

但现在 lmfit 将 "self" 解释为拟合算法的自由变量。 我尝试添加参数提示:

model.set_param_hint("self", self, vary=False)

但这会导致以下错误:

TypeError: fit_func() got multiple values for keyword argument 'self'

我知道 scipy.optimize 中的 curve_fit() 使用 class 方法没有任何问题,leastsq() 也不应该。但我想使用 lmfit,因为它提供了一个很好的接口来实现对某些变量的约束。

On 也可以在 fit_with_lmfit() 内部定义 fit_function() 但我也需要从 class 外部访问它并且返回 results 旁边的函数看起来很乱.

所以我的问题是:有什么方法可以让 lmfit 忽略拟合函数的某些变量,或者更好的是忽略 "self" 作为位置参数?

因为 fit_func 没有使用 self,所以让它成为一个静态方法:

@staticmethod
def fit_func(x, a, b):
    return a * x + b

这样你就不用担心 self.