最小二乘法如何处理给定函数

2024-06-16 10:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些数据,我用下面的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]))

Tags: 数据lambda函数numpynp代表数学fit
2条回答

什么是p[0], p[1], p[2]

scipy.optimize函数通常返回一个参数数组p。例如,给定一个线性方程:

enter image description here

p包括线性方程的截距和连续系数(或权重):

enter image description here

因此,在后一示例中,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]直接对应。你知道吗


细节:优化器是如何工作的?

^{}函数的第一个返回值是一个优化的拟合参数数组,从初始猜测开始,通过迭代最小化残差来计算。残差是预测响应(或y-hat值)和真实响应(y)之间的距离。第二个返回值是协方差矩阵,从中可以estimate the error in the calculation。你知道吗

作为参考,我包括leastsq签名的前三个参数:

scipy.optimize.leastsq(func, x0, args=(), ...)
  • func是您希望优化的目标函数
  • x0是最初猜测的参数
  • args是目标函数所需的附加变量(如果有)

p[0], p[1], and p[2]是在最小二乘拟合中求解的系数。你知道吗

最小二乘拟合是计算系数的值,使因变量数据值和拟合函数预测值之间的误差平方和最小化。你知道吗

它可能是使用共轭梯度迭代法来计算给定起始猜测的系数。你知道吗

我认为你不应该有一个p[2]。你知道吗

你的健身功能应该是:

y = c0*exp(-c1*x)

如果我取两边的自然对数:

ln(y) = ln(c0) - c1*x = z

如果你做这个变换,你就是在一个新函数上做一个简单的线性回归。你知道吗

那是个容易的问题。对于一个自变量的情况,系数有formulas。你知道吗

使用变换后的数据求解系数,并替换回原始方程。你知道吗

相关问题 更多 >