Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中定义三线性回归模型_Python_Curve Fitting_Linear Regression_Least Squares - Fatal编程技术网

如何在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。如果我的函数工作正常,我可以使用曲线拟合