基于最小二乘法的多项式拟合
基于最小二乘法的多项式拟合
多项式拟合是一种常见的数据拟合方法,通过一个多项式函数去拟合一组比较集中的数据。本文将详细介绍基于最小二乘法的多项式拟合原理和方法,帮助读者理解如何通过矩阵运算和最小二乘法来求解拟合系数。
多项式拟合是一种常见的数据拟合方法,即通过一个多项式函数去拟合一组比较集中的数据。
比如这组数据大致呈现一个线性关系,所以可以近似用线性方程来拟合。即:
当一组数据变得更“乱”时,已经看不出来是大致的线性关系了。比如下图:
这时再用线性关系拟合的话,误差太大。那么就可以多项式去拟合组数据了。
我们定义一个多项式函数为g(x)如下:
假设我们有n组坐标(x,f(x)),并代入该多项式,可得:
转化成矩阵形式得:
为方便计算,设x横坐标矩阵为X,系数矩阵为A,纵坐标矩阵为Y。即:XA=Y。
我们要求得就是由k+1个系数组成的A矩阵,观察到该矩阵方程形式是一个(k+1)×n阶*(k+1)×1阶的矩阵等于n×1阶的矩阵。如果n不等于k+1,X矩阵不为方阵,无法直接解得系数A矩阵,说白了就是方程组个数少于要求的系数个数,所以该方程可能有多个解甚至无数个解,但是我们可以求出一个最优解出来,也就是解超定方程。
现在我们来求解这个方程的最优解,XA=Y可以写成Y-XA=0,易知只要Y和XA越接近,才能求得最优解。现构造误差函数S:
现在把S写成S(A)=(Y-XA)^T(Y-XA)的形式,S(A)为关于A的误差函数。如下图,就很容易看出S(A)是怎么来的。注意到S(A)是个标量,所以只要使得S(A)趋近于0就可以求得最优解。
我们对S(A)求导并且令其导函数为0得到:
这就可以求出A矩阵了。一阶导无法判断这时求出的系数矩阵A满足的是最小值,所以再求S(A)的二阶导,得出一个误差函数的二阶偏导数构成的方阵,也就是海森矩阵(Hessian Matrix)。
如果这个二阶导是大于0的或者说这个X^TX(海森矩阵)是正定的,就能说明此时一阶导解出的A矩阵是使得误差函数S(A)满足最小值的,也就是说此时解出的A矩阵为最优解。怎么去证明这个海森矩阵是正定的,常见的方法有顺序主子式法、特征值法等,据证明这个海森矩阵确实是正定的,这里就不做具体说明了。
所以根据误差函数一阶导数解得A矩阵:
为什么这样可以求出最优解,大家可以参考多元函数的最值问题,其实和这个最优解的求解过程是一样的原理。现在我们从求多元函数最值的角度理解这个问题。
前面我已经设误差函数为S了,S就是关于k+1个系数的多元函数,要求这个多元函数的最小值,首先可以对这个多元函数的每个变量求偏导数:
化简得到:
化成矩阵形式得到X'A=Y':
注意到这个式子其实就是由XA=Y两边乘上X的转置矩阵得到:
这里解得的A矩阵为什么使得S满足最小值前面已经说过了。通过X'A=Y'可以直接求得A,因为X'是个k+1×k+1方阵,即:
上述从构造矩阵的误差函数和多元误差函数的两个角度去分析这个问题,最后解出的结果都是一样的,原理和过程都是一致的,只是形式看上去有些差别。
原理都是基于最小二乘法的来实现的,所谓最小二乘法就是一种数学优化技术,常用于通过最小化误差的平方和来拟合数据或求解近似解。它广泛应用于回归分析、数据拟合、信号处理、机器学习等科技领域,尤其是在解决像超定方程组(方程数量大于未知数)问题时。
观察我们假设的多项式形式,就可以知道k为最高次幂,也是为系数a的个数。这个k由我们自己决定,一般来说k越大,项数就越多,拟合的就更准确,但过大的话会出现过拟合现象,过小的话又不能准确捕获数据的变化趋势。
这里就用前面提到的那个散度图作为案例,我们观察到该散点可能会跟三次函数相关性较大,k取3。根据拟合算法可以得到一个相对准确的系数以及多项式结果:
源代码参考该文:基于最小二乘法的多项式拟合