最小二乘逼近问题

计算科学 matlab 最小二乘
2021-12-17 03:24:14

我正在学习科学计算课程,我们刚刚学习了最小二乘近似。我的问题特别是关于使用多项式进行近似。我知道,如果您有 n+1 个数据点,您可以找到一个描述所有这些点的唯一 n 次多项式。但我也明白为什么这并不总是理想的。使用这种方法,您可以在数据点之间获得很多噪音。我想得到一个能很好地估计你的数据的低次多项式是很好的。

我的问题是:您如何在实践中决定要使用的多项式次数?是否有经验法则,还是仅取决于手头的问题?在选择更多或更少的学位时,我们是否必须考虑各种权衡?或者我在这里误解了什么?

提前致谢。

3个回答

插值和曲线拟合最重要的方面是了解为什么高阶多项式拟合可能是一个问题以及其他选项是什么,然后您可以了解它们何时/不是一个好的选择。

高阶多项式的一些问题:

  • 多项式自然是振荡函数。随着多项式阶数的增加,振荡次数增加并且这些振荡变得更加严重。我在这里简化,多重和虚根的可能性使它变得更复杂一些,但重点是一样的。

  • 当 x 趋于 +/- 无穷大时,多项式以等于多项式阶数的速率接近 +/- 无穷大。这通常不是期望的行为。

  • 计算高阶多项式的多项式系数通常是一个病态问题。这意味着小错误(例如计算机中的四舍五入)可能会导致答案发生很大变化。必须求解的线性系统涉及一个Vandermonde 矩阵,它很容易成为病态的。

我认为也许这个问题的核心是曲线拟合插值之间的区别。

当您认为您的数据非常准确时使用插值,因此您希望您的函数与数据点完全匹配。当您需要数据点之间的值时,通常最好使用与数据的局部趋势相匹配的平滑函数。对于此类问题,三次或 Hermite 样条通常是一个不错的选择,因为它们对数据中的非局部(即远离给定点的数据点)变化或错误不太敏感,并且比多项式更不易振荡。考虑以下数据集:

x = 1   2   3   4   5   6   7   8   9  10
y = 1   1 1.1   1   1   1   1   1   1   1

插值
多项式拟合比 Hermite 样条具有更大的振荡,尤其是在数据集边缘附近。

另一方面,最小二乘近似是曲线拟合技术。当您对数据的预期功能有所了解时使用曲线拟合,但您不需要您的函数准确地通过所有数据点。当数据可能包含测量误差或其他不精确性,或者当您希望提取数据的总体趋势时,这很典型。最小二乘逼近最常在课程中通过使用多项式进行曲线拟合来引入,因为这会产生一个相对简单的线性系统,使用您在课程早期可能学到的技术来求解该系统相对简单。然而,最小二乘技术比多项式拟合更通用,可用于将任何所需函数拟合到数据集。例如,如果您预计数据集呈指数增长趋势,

最后,选择适合数据的正确函数与正确执行插值或最小二乘计算同样重要。这样做甚至允许(谨慎)外推的可能性。考虑以下情况。给定 2000-2010 年美国的人口数据(以百万计):

Year:  2000   2001   2002   2003   2004   2005   2006   2007   2008   2010
Pop.: 284.97 287.63 290.11 292.81 295.52 298.38 301.23 304.09 306.77 309.35

使用指数线性化最小二乘拟合N(t)=A*exp(B*t)或 10 阶多项式插值得到以下结果:
人口图

美国人口增长不是指数级的,但我会让你判断更合适的人选。

非常不科学,但一个好的经验法则是 3 次多项式通常是一个好的开始,实际上我从未见过有人使用超过 6 次的多项式来获得好的结果。

“理想”多项式将是最低阶的多项式,可以很好地代表无噪声数据以满足您的目的。

如果您的数据足够小以允许它(通常是),您可以简单地尝试使用高阶多项式进行拟合,直到您开始看到振荡,这往往是“过度拟合”的标志。

另一种选择是平滑样条曲线,但这在很大程度上取决于应用程序。样条和平滑样条仅适用于插值。对于嘈杂的数据,我倾向于使用多项式拟合而不是平滑样条曲线,但我使用的数据通常可以很好地近似于多项式。

我使用多项式逼近的一种相当有效的方法是计算各种度数(例如,从 1 到 10)的最小二乘多项式,然后选择连续(当按数据集中的 x) 点排序。这有助于排除振荡过于剧烈的曲线。