python中直观的fitfunc和errfunc是什么?

时间:2017-02-28 06:42:01

标签: python scipy

我只是想问你所有关于什么是fitfunc,errfunc后面跟scipy.optimize.leastsq直观。我并不习惯python,但我想理解这一点。这是我想要了解的代码。

def optimize_parameters2(p0,mz):
    fitfunc = lambda p,p0,mz: calculate_sp2(p, p0, mz)
    errfunc = lambda p,p0,mz: exp-fitfunc(p,p0,mz)
    return scipy.optimize.leastsq(errfunc, p0, args=(p0,mz))

有人可以一字一句解释这段代码的叙述吗? 很抱歉这么具体,但我确实无法理解它的内容。

2 个答案:

答案 0 :(得分:0)

Python支持在运行时使用名为lambda的构造创建匿名函数(即未绑定到名称的函数)。在您的示例中,fitfuncerrfunc是两个这样的lambda函数。

我相信calculate_sp2exp_fitfunc只是代码中的两个函数,但您未在示例中提供其代码。因此,简而言之,fitfunc实际上使用3个参数calculate_sp2调用(p, p0, mz)函数,并返回calculate_sp2返回的值。 errfunc也以同样的方式运作。

正如scipy.optimize.leastsq的官方文档中所提到的,leastsq()最小化了一组方程的平方和。您可以从官方文档中了解leastsq()的参数。

我给出一个简单的例子来说明lambda函数的工作原理。

def add(x,y):
    return x + y

def subtract(x,y):
    return x-y if x > y else y-x

def main(x,y):
    addition = lambda x,y: add(x,y)
    subtraction = lambda x,y: subtract(x,y)
    return addition(x,y) * subtraction(x,y)

print(main(7,4)) # prints 33 which is equal to (7+4)*(7-4)

答案 1 :(得分:0)

这个特定的代码片段正在实现非线性最小二乘回归,以找到最适合一组数据的曲线函数的参数(这里是fitfuncexp,可能是“实验数据”的缩写)。 leastsq()是进行非线性最小二乘优化的一种更通用的例程,而不仅仅是曲线拟合。它需要一个函数(这里名为errfunc),它给出一个参数向量(p)并返回一个数组。它将尝试找到最小化返回数组的平方的参数向量。为了使用leastsq实现“将曲线拟合到数据”,您必须提供errfunc来评估给定试验参数向量的曲线(fitfunc),然后从中减去数据(即计算“错误”或有时称为“残差”)。

要明确的是,这些名称都不重要。我只是用它们来引用你提供的代码片段的特定部分。您将找到使用leastsq()进行曲线拟合的其他代码,这些代码以不同的方式命名和组织代码,但现在您知道了一般方案,您应该可以继续使用。