美文网首页统计学高数
最小二乘法—多项式拟合非线性函数

最小二乘法—多项式拟合非线性函数

作者: PrivateEye_zzy | 来源:发表于2018-09-10 17:36 被阅读175次

    本章涉及到的知识点清单:

    1、函数的近似表示—高次多项式

    2、误差函数—最小二乘法

    3、引出案例函数曲线

    4、目标函数

    5、优化目标函数

    6、优化目标函数—梯度下降法

    7、优化目标函数—求解线性方程组

    8、python编程实现拟合曲线函数

    9、结果分析

    一、函数的近似表示—高次多项式

    为了研究一些复杂的函数,我们希望对函数自变量进行有限的加、减、乘法三种算数运算,便可以求出原函数值,因此我们通常使用高次多项式来近似表示函数

    高次多项式近似表示f(x)

    可以看到,我们可以用n阶多项式的系数线性组合来近似表示f(x)

    特别说明,由泰勒展开式可知,当pn(x)的各阶导数和f(x)的各阶导数都相等,则f(x)和pn(x)的误差只是(x-x0)^n的高阶无穷小

    泰勒公式

    二、误差函数—最小二乘法

    我们用f(x)的真实函数值减去多项式函数的结果的平方,来表示f(x)和多项式函数的误差关系,即

    最小二乘法表示误差

    我们令x0=0,则最小二乘法表示的误差为

    最小二乘法表示误差

    三、引出案例函数曲线

    有了上述数学知识,下面我们用一个案例来介绍最小二乘法拟合非线性函数的算法步骤

    案例:求一个多项式来拟合下列函数的函数值

    案例函数

    其中我们加入了噪点数据noise,使得函数在定义域内随机的震荡

    我们画出f(x)在[-1, 1]之间的图像,即

    案例函数图像

    案例问题即为:已知上述N个数据点,求其函数f(x)的表达式?

    显然,f(x)也就是机器学习要学习的目标

    四、目标函数

    下面我们开始推导机器学习的过程

    机器学习的目标为:

    (1) 学习一个f(x)多项式,可以拟合真实数据的变化趋势

    (2)f(x)的目标:使每一个真实数值到f(x)的拟合数值的距离之和最小

    翻译为数学语言,即

    学习到的f(x) 目标函数

    五、优化目标函数

    为了使目标函数最优,我们对每个系数求其偏导数为0,即

    优化目标函数

    至此,我们需要根据上述k的等式,求出所有的系数ak,有两种方法可以求解

    (1)梯度下降法

    (2)求解线性方程

    六、优化目标函数—梯度下降法

    采用梯度下降法,可以避免我们用数学方法直接一步来求解上述k个方程的最优解,而是采用迭代逼近最优解的思路,其具体步骤为:

    (1)初始化k个系数值,开始迭代

    (2)每次迭代,分别求出各个系数ak对应的梯度值

    (3)用梯度值和学习率来更新每一个系数ak

    (4)保证每次更新完所有系数,对应的损失函数值都在减少(说明梯度一直在下降)

    翻译为数学语言为:

    计算ak对应的梯度值

    计算ak的梯度值

    更新ak

    更新ak

    七、优化目标函数—求解线性方程组

    求解线性方程组让我们直接一步求出偏导数最优解,其具体步骤为:

    (1)将最优化偏导数的方程组写为矩阵乘法形式:XA=Y

    (2)利用数学消元算法来求解XA=Y

    我们对k个偏导数=0的等式进行化简处理,即

    k个偏导数等式

    下面我们将其写为矩阵相乘的形式,将所有只含有x的系数写为第一个矩阵X,即

    含有x的系数矩阵

    将只含有待求解的多项式系数ak写为第二个矩阵A,即

    含有a的系数矩阵

    最后将含有y的系数写为第三个矩阵Y,即

    含有y的系数矩阵

    此时,我们就可以用矩阵的乘法来表示最初的k个偏导数为0的等式,即

    k个偏导数等式的矩阵形式

    注意:其中X是k*k的矩阵,A是k*1的矩阵,Y是k*1的矩阵,符合矩阵的乘法规则

    从矩阵表达式可以看出,X和Y矩阵是已知的,A矩阵只包含待求解的f(x)的所有多项式系数,则问题即转化为线性方程组:XA=Y

    求解线性方程组,大概有如下算法

    (1)高斯消元法(全主元、列主消元)

    (2)LU三角分解法

    (3)雅克比迭代法

    (4)逐次超松弛(SOR)迭代法

    (5)高斯-赛德尔迭代法

    这里我们采用高斯消元法来求解A,具体算法步骤较为复杂,我们在单独的章节介绍高斯消元算法

    八、python编程实现拟合曲线函数

    生成带有噪点的待拟合的数据集合

    生成带有噪点的待拟合的数据集合

    计算最小二乘法当前的误差

    计算最小二乘法当前的误差

    迭代解法:最小二乘法+梯度下降法

    迭代解法:最小二乘法+梯度下降法

    数学解法:最小二乘法+求解线性方程组

    数学解法:最小二乘法+求解线性方程组

    九、结果分析

    我们来拟合N=10次幂的多项式,分别用梯度下降法和求解线性方程组的算法来比较拟合结果

    (1)使用梯度下降法来优化目标函数,其拟合结果为:

    梯度下降法拟合结果

    其误差变化为

    梯度下降法优化的误差

    (2)使用求解线性方程组来优化目标函数,其拟合结果为:

    求解线性方程组拟合结果

    其误差变化为

    求解线性方程组优化的误差

    比较上述两种解法,以及多项式拟合的思想,我们可以总结出

    (1)利用函数的近似多项式表示,和最小二乘法来表示目标函数,我们可以高效的拟合非线性函数

    (2)梯度下降法可以一步步迭代逼近目标函数的极值,而不用直接求出偏导数最优解

    (3)求解方程组,使用数学消元的算法,直接一步优化完成了目标函数的偏导数最优解

    (4)从结果上比较,求解方程组的效率和拟合结果要比梯度下降法好

    案例代码见:最小二乘法—多项式拟合非线性函数

    相关文章

      网友评论

        本文标题:最小二乘法—多项式拟合非线性函数

        本文链接:https://www.haomeiwen.com/subject/hwhlgftx.html