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

时间:2017-05-24 20:52:05

标签: python scipy interpolation curve-fitting smoothing

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

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

理想情况下,我想要一条超过2节的曲线以获得更好的贴合度,我绝对不希望曲线穿过每个点。我相信大约5节的曲线将是合身度和平滑度之间的良好平衡。

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

是否有更好的计算或统计方法可以根据一组数据确定平滑因子?

1 个答案:

答案 0 :(得分:1)

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

  

用于选择结数的正平滑因子。在平滑条件下,结数将增加   满足:

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

如果为None(默认值),则s = len(w)如果1 / w [i]是y [i]的标准偏差的估计值,则该值应该是一个好的值。如果为0,则样条曲线   将插入所有数据点。

根据我的经验,当你使用样条曲线时,你是想要看起来而不是试图适合你以后想要使用的功能,所以你可能需要手动检查它是否确实看起来很好。我可能只是看看数据,然后用for循环制作3-4个版本并检查哪一个我觉得更漂亮:)