如何在Python中定义三线性回归模型
我正试图用一个三线性模型来拟合我的观察结果。观察值看起来像一个:如何在Python中定义三线性回归模型,python,curve-fitting,linear-regression,least-squares,Python,Curve Fitting,Linear Regression,Least Squares,我正试图用一个三线性模型来拟合我的观察结果。观察值看起来像一个: A = array([[ 4.18680470e-01, 2.27554169e+00, 1.88600000e+02, 3.40000000e+00], [ 2.64688814e-01, 2.27554169e+00, 1.88600000e+02, 3.40000000e+00], [ 5.65145800e-03, 2.24129739e+00, 1.74300000e
A = array([[ 4.18680470e-01, 2.27554169e+00, 1.88600000e+02, 3.40000000e+00],
[ 2.64688814e-01, 2.27554169e+00, 1.88600000e+02, 3.40000000e+00],
[ 5.65145800e-03, 2.24129739e+00, 1.74300000e+02, 3.40000000e+00],
...,
[ -9.28651988e-01, 1.72997429e+00, 5.37000000e+01, 2.00000000e+00],
[ -6.55695184e-01, 1.72997429e+00, 5.37000000e+01, 2.00000000e+00],
[ -5.03678652e-01, 1.72591163e+00, 5.32000000e+01, 2.00000000e+00]])
我能够使用曲线拟合进行线性回归:
def func(data, a,b,c):
return data[:,0] + data[:,1]*a + data[:,2]*b + c
guess0 = (0.821, 0.00405, 0.955)
params, pcov = optimize.curve_fit(func, A[:,:3], A[:,3],guess0)
现在我尝试用最小二乘法建立三线性模型。“a1,a2,a3,b1,b2,b3,c,R1,R2”是我想要求解的系数。“猜测0”是系数的初始值。回归还应该计算R1和R2,这是我很难定义的部分。我提出的代码如下所示:
def residuals(A,guess):
a1, a2, a3, b1, b2, b3, c, R1, R2 = guess
for ii in range (len(A[:,0])):
if A[:,2][ii] < R1:
return A[:,0][ii] + a1*A[:,1][ii] + b1*A[:,2][ii] + c - A[:,3][ii]
if (A[:,2][ii] >= R1 and A[:,2][ii] <= R2):
return A[:,0][ii] + a1*log10(R1) + a2*A[:,1][ii] - a2*log10(R1) + b1*R1 + b2*A[:,2][ii] - b2*R1 + c - A[:,3][ii]
if A[:,2][ii] > R2:
return A[:,0][ii] + a1*log10(R1) + a2*log10(R2) - a2*log10(R1) + a3*A[:,1][ii] - a3*log10(R2) + b1*R1 + b2*R2 - b2*R1 + b3*A[:,2][ii] - b3*R2+ c - A[:,3][ii]
guess0 = [-1.0,0.0,-0.5,0.00405,0.00405,0.00405,0.0,120,160]
pwithout,cov,infodict,mesg,ier=optimize.leastsq(residuals, A,guess0,full_output=True)
def残差(A,猜测):
a1、a2、a3、b1、b2、b3、c、R1、R2=猜测
对于范围内的ii(len(A[:,0]):
如果A[:,2][ii]=R1和A[:,2][ii]R2:
返回A[:,0][ii]+a1*log10(R1)+a2*log10(R2)-a2*log10(R1)+a3*A[:,1][ii]-a3*log10(R2)+b1*R1+b2*R2-b2*R1+b3*A[:,2][ii]-b3*R2+c-A[:,3][ii]
猜测0=[-1.0,0.0,-0.5,0.00405,0.00405,0.00405,0.0120160]
pwithout、cov、infodict、mesg、ier=优化。最小质量(残差、A、猜测0、完整输出=真)
错误显示:
...
File "C:\Python27\lib\site-packages\scipy\optimize\minpack.py", line 369, in leastsq
shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
File "C:\Python27\lib\site-packages\scipy\optimize\minpack.py", line 20, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "<ipython-input-65-ca078a899876>", line 4, in residuals
if A[:,2][ii] < R1:
IndexError: too many indices
。。。
文件“C:\Python27\lib\site packages\scipy\optimize\minpack.py”,第369行,在leastsq中
shape,dtype=\u check\u func('leastsq','func',func,x0,args,n)
文件“C:\Python27\lib\site packages\scipy\optimize\minpack.py”,第20行,在检查功能中
res=至少1d(thefunc(*(x0[:numput],)+args)))
文件“”,第4行,残差
如果A[:,2][ii]
我确信它应该有不同的定义。Lessq有不同的调用签名;为什么不像以前一样使用曲线拟合?谢谢你的回答。我的问题是定义三线性回归函数。我不确定如何解决R1和R2。如果我的函数工作正常,我可以使用曲线拟合