Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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
在R中是否有与smooth.spline函数等效的Python_Python_R_Smoothing_Splines - Fatal编程技术网

在R中是否有与smooth.spline函数等效的Python

在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

R中的smooth.spline函数允许在粗糙度(由二阶导数的积分平方定义)和拟合点(由残差平方和定义)之间进行权衡。此折衷由spar或df参数完成。一个极端是最小二乘线,另一个极端是一条非常扭曲的曲线,它与所有的数据点相交(如果你用不同的y值复制了x值,则为平均值)

我已经研究了Python中的scipy.interpolate.UnivariateSpline和其他样条线变体,但是,它们似乎只能通过增加节点数和为允许的SS残差设置阈值(称为s)来进行权衡。相比之下,R中的smooth.spline允许在所有x值上都有节点,而不必有一条到达所有点的摆动曲线——惩罚来自二阶导数


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之间绘制它。

可能重复的