我注意到度数高于 3 的样条插值(三次样条以外的所有内容)具有非常高的插值误差,因此预测大多很糟糕。我遇到过各种讲义、幻灯片和 Youtube 视频,它们简单地表明三次样条(3 度)是最佳的,除此之外的任何东西都是一个坏主意。然而,这些消息来源从未提及为什么会这样。
谁能向我解释为什么会这样,或者给我一个标题/链接到解释这一点的期刊/会议论文,或者甚至给出一个证明。
我注意到度数高于 3 的样条插值(三次样条以外的所有内容)具有非常高的插值误差,因此预测大多很糟糕。我遇到过各种讲义、幻灯片和 Youtube 视频,它们简单地表明三次样条(3 度)是最佳的,除此之外的任何东西都是一个坏主意。然而,这些消息来源从未提及为什么会这样。
谁能向我解释为什么会这样,或者给我一个标题/链接到解释这一点的期刊/会议论文,或者甚至给出一个证明。
没有这样的证据,因为它并不总是正确的。这是一个经验法则,因为我保证你可以想出一种情况——实际上有无数种情况——高阶样条曲线比三次样条曲线做得更好。任何给定情况的最佳样条顺序与您尝试建模的系统的顺序完全相同。如果顺序相同并且您的数据点没有错误(当然,绝不会出现这种情况,理论问题除外),那么您应该能够完美地对系统进行建模。
他们建议不要高于三次样条的原因是因为过度拟合真的非常糟糕。过拟合会极大地放大错误,而“欠拟合”(选择阶数低于您正在建模的系统阶数的样条方法)会引入一些低通滤波,这要么不是那么糟糕,要么有时甚至是有益的。
这是一个粗略的大纲(可能正确也可能不正确)。样条是多项式插值,即到相邻支持点之间的曲线的每个部分都是多项式。N 阶多项式具有 N+1 个系数(自由度),因此每个部分可以满足 4 个边界条件。边界条件的选择决定了插值的类型。对于精确地击中支撑点并创建连续一阶和二阶导数的样条曲线。
对于高阶样条,您也可以获得连续的高阶导数,但这往往会在更尖锐的过渡处添加大量高频内容,并经常导致“振铃”或过度振荡。原始词“样条”源于人们用来进行“机械”插值的灵活尺子。我认为您实际上可以通过分析标尺机制来显示三次样条与该行为匹配。
与大多数事情一样,这取决于您的应用程序和您想要做什么。三次样条的一个有趣的替代方法是 Hermitian 插值,它可以保证单调性并确保插值永远不会在支撑点之外摆动。来自 MATLAB 帮助函数
Tips
spline constructs in almost the same way pchip constructs . However, spline chooses the slopes at the differently, namely to make even continuous. This has the following effects:
- spline produces a smoother result, i.e. is continuous.
- spline produces a more accurate result if the data consists of values of a smooth function.
- pchip has no overshoots and less oscillation if the data are not smooth.
- pchip is less expensive to set up.
- The two are equally expensive to evaluate.
有几种样条线,它们的目标相互冲突:
对于一些数据点,您可能需要精确插值;但是对于数千个点,甚至是十几个有噪声的点,精确插值会摆动。大多数样条拟合器都有参数来权衡拟合接近度与整体平滑度。这是 1 次样条曲线图(分段线性,连接点),数据 = 线 + 噪声。您会看到,准确地拟合数据上下曲折,而最大平滑给出一条直线:
有用于不同作业的样条曲线,具体取决于输入数据和介于两者之间的新点:数以千万计的点、噪声的程度、分散/在网格上、1d 2d 3d ... 例如在 3d 中的常规网格上,a度数样条 会看每个查询点的邻居:1(最近邻居)、8(三线性)、27、64 ... 你买得起 64 吗?你需要64吗?这取决于。
(非常简单地说,B 样条平滑;
Catmull-Rom 样条插值,例如电影帧;
1/3 B + 2/3 CR 之类的混合在两者之间很有用。)
多项式次数如何影响摆动?见龙格现象。
关于 1d 2d 3d 中的超调...请参阅 math.stackexchange 上的(咳咳)
这个问题
。
关于超出线性样条的外插的危险,请参见SO。
另一种看待这一点的方法是注意到最有趣的图像和数据集在一定程度上是“平滑的”。例如,插值高斯噪声应该更适合高阶样条。