如何解决继续使用numpy.piecewise来获取此错误,以获取分段线性回归
我有一个非常大的数据文件,其中x =时间,y =距离。我想弄清楚不同部分的速度如何。理想情况下,我希望Python计算分段和相应的线性回归函数。我在Google上进行了搜索,认为我最好的选择是使用numpy.piecewise来获得分段线性回归。
我只会不断收到此错误
# Remove full_output from kwargs,otherwise we're passing it in twice'.
使用的代码如下:
y = cleandata["Distance (um)"]
def piecewise_linear(x,x0,x1,b,k1,k2,k3):
condlist = [x < x0,(x >= x0) & (x < x1),x >= x1]
funclist = [lambda x: k1*x + b,lambda x: k1*x + b + k2*(x-x0),lambda x: k1*x + b + k2*(x-x0) + k3*(x - x1)]
return np.piecewise(x,condlist,funclist)
p,e = sp.optimize.curve_fit(piecewise_linear,x,y)
xd = np.linspace(0,1429228.0,285845)
plt.plot(x,y,"o")
plt.plot(xd,piecewise_linear(xd,*p))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-60-a059f3aec3cb> in <module>
6 return np.piecewise(x,funclist)
7
----> 8 p,y)
9
10 xd = np.linspace(0,285845)
~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in curve_fit(f,xdata,ydata,p0,sigma,absolute_sigma,check_finite,bounds,method,jac,**kwargs)
761 # Remove full_output from kwargs,otherwise we're passing it in twice.
762 return_full = kwargs.pop('full_output',False)
--> 763 res = leastsq(func,Dfun=jac,full_output=1,**kwargs)
764 popt,pcov,infodict,errmsg,ier = res
765 ysize = len(infodict['fvec'])
~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in leastsq(func,args,Dfun,full_output,col_deriv,ftol,xtol,gtol,maxfev,epsfcn,factor,diag)
386 if not isinstance(args,tuple):
387 args = (args,)
--> 388 shape,dtype = _check_func('leastsq','func',func,n)
389 m = shape[0]
390
~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in _check_func(checker,argname,thefunc,numinputs,output_shape)
24 def _check_func(checker,25 output_shape=None):
---> 26 res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
27 if (output_shape is not None) and (shape(res) != output_shape):
28 if (output_shape[0] != 1):
~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in func_wrapped(params)
461 if transform is None:
462 def func_wrapped(params):
--> 463 return func(xdata,*params) - ydata
464 elif transform.ndim == 1:
465 def func_wrapped(params):
<ipython-input-60-a059f3aec3cb> in piecewise_linear(x,k3)
4 condlist = [x < x0,x >= x1]
5 funclist = [lambda x: k1*x + b,lambda x: k1*x + b + k2*(x-x0) + k3*(x - x1)]
----> 6 return np.piecewise(x,funclist)
7
8 p,y)
<__array_function__ internals> in piecewise(*args,**kwargs)
~/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/function_base.py in piecewise(x,funclist,*args,**kw)
615 raise ValueError(
616 "with {} condition(s),either {} or {} functions are expected"
--> 617 .format(n,n,n+1)
618 )
619
ValueError: with 1 condition(s),either 1 or 2 functions are expected
我不理解错误,也不知道这段代码出了什么问题。
这是我第一次尝试三个细分。最终,我想使用更多的细分。
任何人都知道这段代码有什么问题吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。