我正在尝试使用scipy.interpolate.UnivariateSpline
创建三次样条曲线,但我找不到平滑因子s
的适当值。
在s=0
,每个数据点成为一个结,曲线遍历每个点。另一方面,s
的高值返回2节的曲线。
理想情况下,我想要一条超过2节的曲线以获得更好的贴合度,我绝对不希望曲线穿过每个点。我相信大约5节的曲线将是合身度和平滑度之间的良好平衡。
目前,我正在使用UnivariateSpline
制作曲线并调整平滑度,直到结节数为5左右。显然,这不是最好的过程。
是否有更好的计算或统计方法可以根据一组数据确定平滑因子?
答案 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个版本并检查哪一个我觉得更漂亮:)