在R中是否有与smooth.spline函数等效的Python
R中的smooth.spline函数允许在粗糙度(由二阶导数的积分平方定义)和拟合点(由残差平方和定义)之间进行权衡。此折衷由spar或df参数完成。一个极端是最小二乘线,另一个极端是一条非常扭曲的曲线,它与所有的数据点相交(如果你用不同的y值复制了x值,则为平均值) 我已经研究了Python中的scipy.interpolate.UnivariateSpline和其他样条线变体,但是,它们似乎只能通过增加节点数和为允许的SS残差设置阈值(称为s)来进行权衡。相比之下,R中的smooth.spline允许在所有x值上都有节点,而不必有一条到达所有点的摆动曲线——惩罚来自二阶导数在R中是否有与smooth.spline函数等效的Python,python,r,smoothing,splines,Python,R,Smoothing,Splines,R中的smooth.spline函数允许在粗糙度(由二阶导数的积分平方定义)和拟合点(由残差平方和定义)之间进行权衡。此折衷由spar或df参数完成。一个极端是最小二乘线,另一个极端是一条非常扭曲的曲线,它与所有的数据点相交(如果你用不同的y值复制了x值,则为平均值) 我已经研究了Python中的scipy.interpolate.UnivariateSpline和其他样条线变体,但是,它们似乎只能通过增加节点数和为允许的SS残差设置阈值(称为s)来进行权衡。相比之下,R中的smooth.spl
Python有这样的样条曲线拟合机制吗?允许所有节点,但惩罚二阶导数?我一直在寻找完全相同的东西,但不希望将代码翻译成Python。Splitter软件包似乎是一种选择,然而:根据谷歌的研究,我得出结论:
相比之下,R中的smooth.spline允许在所有x值上都有节点,而不必有一条到达所有点的摆动曲线——惩罚来自二阶导数。您可以在Python中使用R函数和
rpy2
:
import rpy2.robjects as robjects
r_y = robjects.FloatVector(y_train)
r_x = robjects.FloatVector(x_train)
r_smooth_spline = robjects.r['smooth.spline'] #extract R function# run smoothing function
spline1 = r_smooth_spline(x=r_x, y=r_y, spar=0.7)
ySpline=np.array(robjects.r['predict'](spline1,robjects.FloatVector(x_smooth)).rx2('y'))
plt.plot(x_smooth,ySpline)
如果要直接设置lambda:spline1=r_平滑_样条(x=r_x,y=r_y,lambda=42)
不起作用,因为lambda
在Python中已经有了另一个含义,但有一个解决方案:
要运行代码,首先需要定义数据x_列
和y_列
,并且可以定义x_平滑=np.array(np.linspace(-3,51920))。
如果您想以全高清分辨率在-3和5之间绘制它。可能重复的