Python 如何为scipy.interpolate.UnivariateSpline选择合适的平滑因子

Python 如何为scipy.interpolate.UnivariateSpline选择合适的平滑因子,python,scipy,interpolation,curve-fitting,smoothing,Python,Scipy,Interpolation,Curve Fitting,Smoothing,我正在尝试使用scipy.interpolate.UnivariateSpline创建三次样条曲线,但是我很难找到平滑因子s的合适值 在s=0时,每个数据点成为一个结,曲线穿过每个点。另一方面,s的高值返回一条2节的曲线 理想情况下,我想要一条超过2节的曲线以获得更好的拟合,我绝对不想要一条通过每一点的曲线。我相信一条5节左右的曲线将是拟合度和平滑度之间的良好平衡 目前,我正在使用UnivariateSpline绘制曲线,并调整平滑度,直到节点数达到5个左右。显然,这不是最好的过程 有没有更好的

我正在尝试使用
scipy.interpolate.UnivariateSpline
创建三次样条曲线,但是我很难找到平滑因子
s
的合适值

s=0时
,每个数据点成为一个结,曲线穿过每个点。另一方面,
s
的高值返回一条2节的曲线

理想情况下,我想要一条超过2节的曲线以获得更好的拟合,我绝对不想要一条通过每一点的曲线。我相信一条5节左右的曲线将是拟合度和平滑度之间的良好平衡

目前,我正在使用
UnivariateSpline
绘制曲线,并调整平滑度,直到节点数达到5个左右。显然,这不是最好的过程


有没有更好的计算或统计方法来确定基于一组数据的平滑度因子?

Scipy本身使用这种启发式方法(来自文档):

用于选择结数的正平滑因子。节点数将增加,直到平滑条件满足 满意:

sum((w[i] * (y[i]-spl(x[i])))**2, axis=0) <= s
sum((w[i]*(y[i]-spl(x[i]))**2,轴=0)