[我想在Python中使用R中的自然三次平滑样条曲线smooth.spline
(就像许多其他人一样想要Python natural smoothing splines,Is there a Python equivalent to the smooth.spline function in R,Python SciPy UnivariateSpline vs R smooth.spline等))因此,我像rpy2
中所述使用https://morioh.com/p/eb4151821dc4,但我想直接设置lambda
而不是spar
:
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, lambda=42)
#alternative: spline1 = r_smooth_spline(x=r_x, y=r_y, spar=0.7) would work fine, but I would like to control lambda dirctly
ySpline=np.array(robjects.r['predict'](spline1,robjects.FloatVector(x_smooth)).rx2('y'))
plt.plot(x_smooth,ySpline)
[当我这样做时,spline1 = r_smooth_spline(x=r_x, y=r_y, lambda=42)
行不起作用,因为Python已经对lambda
进行了预定义的解释(您可以从lambda
的蓝色代码突出显示出来):(我希望将lambda
解释为平滑惩罚参数lambda。
如果将lambda
替换为spar
,我会得到自然的三次样条,但我想直接控制lambda
。
**<dict>
来指定R个命名参数,这些参数的名称在Python中语法上无效。