原文地址:https://www.jianshu.com/p/af0a4f71c05a

目录

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

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

三、引出案例函数曲线

四、目标函数

五、优化目标函数

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

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

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

九、结果分析


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

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

高次多项式近似表示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. python多项式拟合_最小二乘法—多项式拟合非线性函数

    本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...

  2. 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

    1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...

  3. 最小二乘法拟合非线性函数及其Matlab/Excel 实现

    1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...

  4. 最小二乘法多项式拟合的Java实现--转

    原文地址:http://blog.csdn.net/funnyrand/article/details/46742561 背景 由于项目中需要根据磁盘的历史使用情况预测未来一段时间的使用情况,决定采用 ...

  5. 多项式拟合 java_最小二乘法多项式拟合的Java实现

    背景由于项目中需要根据磁盘的历史使用情况预测未来一段时间的使用情况,决定采用最小二乘法做多项式拟合,这里简单描述下: 假设给定的数据点和其对应的函数值为 (x1, y1), (x2, y2), ... ...

  6. matlab的多项式拟合,函数求导,画函数曲线

    给一列数据. 拟合出该数据的函数曲线.多项式拟合. 然后画出函数曲线来.以及给出函数形式. 求导. 再画出导数的曲线.以及给出导数函数形式. matlab代码: clc close all clear ...

  7. 利用keras搭建神经网络拟合非线性函数

    神经网络有着一个非常奇妙的结构,它的数学原理虽然相对简单,但是能做的事情却不少,数学家已经证明,具有2层(输入层除外)和非线性激活函数的神经网络,只要在这些层中有足够多的神经元,就可以近似任何函数(严 ...

  8. 使用matlab拟合非线性函数找到最优参数值

    待解决的问题: 软测量作业第二题: 2. 炼钢厂出钢时盛钢水的钢包在使用过程中受钢水和炉渣对包衬耐火材料的浸蚀,其容积不断增大.表2所示为使用不同次数x时钢包容积y(由于容积不便测量,故以钢包盛满钢水 ...

  9. matlab 高阶拟合,matlab – 将多项式拟合到函数的最大值

    我想将多项式拟合到噪声数据,使得近似多项式总是> =原始数据.例如: x = linspace (-2, 6); y = (x-2).^2 + 1 + 2 * randn (size (x)); ...

  10. tensorflow神经网络拟合非线性函数与操作指南

    本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...

最新文章

  1. 《数学之美》第12章 有限状态机—地图与本地搜索的核心技术
  2. 支付宝打造公共账号业务网关, RSA密钥对生成
  3. mysql post 中文乱码_mysql/mariaDB中文乱码问题的处理
  4. 【Linux】一步一步学Linux——ulimit命令(218)
  5. 产品经理十八章:产品创新能力(二)
  6. 深圳python指南_深圳Pythonlevel7
  7. [MongoDB] MongoDB的基本操作以及文档的增删改查
  8. [导入]从函数RND的使用想到的!
  9. 【ZeroClipboard is not defined】的解决方法
  10. 推动隐私计算技术,360数科提出分割式神经网络框架
  11. 大津二值化算法 ( Otsu's binarization ) 自动确定二值化图像时的阈值
  12. PHP100视频教程解压密码[连载结束]
  13. 【周总结】博客第一周小结SSL暑假训练第二周小结
  14. hyperic hq mysql_实战:用Hyperic HQ 诊断网站无法访问问题
  15. python返回索引值_python取索引值
  16. Vagrant 安装 Centos7
  17. 跟青翼一起学Qt4编程大纲目录
  18. python远程监控_Python实现远程端口监控实例
  19. libtorch opecv c++ cmake clion
  20. C --cp2 类似cat工具的小程序。

热门文章

  1. os.path -- 常用路径操作
  2. HTML入门与进阶以及HTML5
  3. php定义一个矩形类rectangle,c#定义一个类圆Circle或者定义一个矩形类Rectangle,分别计算它们的周长和面积....
  4. ftp上传工具 免安装,3款最好用的ftp上传工具 免安装
  5. repo clean
  6. deepin Linux 安装 tar,Linux Deepin 15.11安装更新firefox flash player
  7. PicGo+Github图床配置
  8. 在线免费服务器,免费web服务器Tomcat
  9. 用计算机进行废物回收,回收旧的显示器以进行废物利用
  10. PDM与ERP系统集成设计