【发布时间】:2020-02-02 22:42:44
【问题描述】:
我想在 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。
如果我用spar 替换lambda,我会得到一个自然三次样条,但我想直接控制lambda。
【问题讨论】:
标签: python r rpy2 spline smoothing