Я хочу использовать естественные кубические сплайны сглаживания smooth.spline
от R в Python (как и многие другие тоже хотят ( Python естественные сглаживающие сплайны , Есть ли Python, эквивалентный гладкому.spline функция в R , Python SciPy UnivariateSpline против 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
напрямую.