我想在Python中使用来自R的自然三次平滑样条
当我执行这段代码时,
如果我用
smooth.spline
(就像许多其他人一样想要的一样(Python自然平滑样条,Python是否有与R中的smooth.spline函数相当的Python等效函数,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。如果我用
spar
替换lambda
,那么得到的将是一个自然的三次样条函数,但我想直接控制lambda
。