我有一些数据,我使用下面的 numpy 函数来进行拟合。配件很好,但我需要一些解释它是如何工作的。 p[1],p[2],p[0] 代表什么。如果我能得到它的数学表达式,那就太好了。最小二乘法到底在做什么?
fitfuncvx = lambda p, x: p[2]+p[0]*np.exp(-x/p[1])
errfuncvx = lambda p, x, y: y - fitfuncvx(p, x)
sig_fit=np.where(Sig<12)
pinit = [1, 100,0.1]
pfinal, success = optimize.leastsq(errfuncvx, pinit[:], args=(Sig[sig_fit], vx[sig_fit]))
什么是p[0]、p[1]、p[2]
?
scipy.optimize
函数通常返回一个参数数组p
。例如,给定一个线性方程:
p
包括线性方程的截距和连续系数(或权重):
因此,在后一个示例中,p[0]
和 p[1]
属于截距和斜率 分别为一行。当然,还可以针对高阶多项式优化更多参数(...
)。 OP使用指数函数,其中参数可以重写如下:
def fitfuncvx(p, x):
b0, b1, b2 = p
return b2 + b0*np.exp(-x/b1)
我们看到p
中的参数被显式解包为单独的权重b0, b1, b2
,它们直接对应于p[0], p[1 ]、p[2]
分别。
<小时/>
详细信息:优化器如何工作?
scipy.optimize.leastsq
的第一个返回值函数是一组优化的拟合参数,从您最初的猜测开始,通过迭代最小化残差来计算。残差是预测响应(或 y
-hat 值)与真实响应 (y
) 之间的距离。第二个返回值是一个协方差矩阵,从中可以 estimate the error in the calculation .
作为引用,我包含了 leastsq
签名的前三个参数:
scipy.optimize.leastsq(func, x0, args=(), ...)
func
是您希望优化的目标函数
x0
是初始猜测参数
args
是目标函数所需的附加变量(如果有)
我是一名优秀的程序员,十分优秀!