基于Python的多项式拟合正弦函数

多项式拟合正弦函数 一,实验过程 实验目的 掌握最小二乘法求解(无惩罚项的损失函数),掌握加惩罚项(2 范数)的损失函数优化,梯度下降法,共轭梯度法

本文包含相关资料包-----> 点击直达获取<-------

多项式拟合正弦函数

一、实验过程

实验目的

掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2 范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本)

实验要求

生成数据,加入噪声;

用高阶多项式函数拟合曲线;

用解析解求解两种 loss 的最优解(无正则项和有正则项);

优化方法求解最优解(梯度下降,共轭梯度);

用你得到的实验数据,解释过拟合。

用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。

语言不限,可以用 matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如 pytorch,tensorflow 的自动微分工具。

实验环境

OS: Windows 11

Python: 3.7.9

设计思想

生成数据并加入噪声

利用高阶多项式函数拟合曲线(无正则项)

代入 即可得到 获得拟合曲线。

利用高阶多项式函数拟合曲线(有正则项)

通过正则化减轻过拟合影响,为误差函数增加一个惩罚项如下:

代入

梯度下降法求解最优解

在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向;对应的,梯度的反方向就是给定点的下降最快的方向。梯度下降公式为 ,其中 为学习率或步长对有惩罚项的误差函数:

共轭梯度法求解最优解

考虑线性对称正定方程组: 构造二次函数:

对其求导得:

则求 的解即为求函数

直到满足精度,退出循环,得到

二、实验结果分析

不带正则项的解析解

  • 在 1 阶时,无法拟合,属于欠拟合,需要提高阶数;
  • 在 3 阶时,拟合效果较好,阶数提高到 5 阶,拟合效果更好;
  • 阶数提高到 9 阶,拟合函数图像能穿过大多数训练集上的点,但波动较大,出现过拟合现象。

可以通过增加训练集大小降低过拟合的影响:

设定阶数为 9 阶,在训练集大小分别为 10,20,50,100 下拟合结果:

随着训练集增大,过拟合现象逐渐消失,拟合函数很好的拟合到原函数上。

带正则项的解析解 取训练集大小为 10,验证集大小为 20,阶数为 9,确定最优

取 为 ,在训练集大小为 10 ,阶数为 9 的条件下的带惩罚项和不带惩罚项的拟合图像比较

可以看出,加入惩罚项有效降低过拟合现象。

梯度下降求得优化解

设定 为 ,学习率 为 0.01,(左图精度为 ,右图精度为 )设定训练集大小为 10 ,在不同阶数下拟合函数:

阶数为 9:

设定阶数为 9,在不同训练集大小下拟合函数 训练集大小为 20:

训练集大小为 50:

精度升高,迭代次数变大;多项式阶增大,迭代次数呈现下降趋势;而训练集的大小对于迭代次数几乎没有影响,但仍然满足训练集越大拟合效果也好的结论。

共轭梯度求得优化解

设定 为 ,(左图精度为 ,右图精度为 )设定训练集大小为 10 ,在不同阶数下拟合函数: 阶数为 3 :

设定阶数为 9,在不同训练集大小下拟合函数 训练集大小为 20:

训练集大小为 50:

的右图的拟合效果并未显著强于精度为 下的拟合效果。

共轭梯度法的迭代次数受精度、多项式阶、训练集的大小的影响并不大,一直在

三、结论

在对正弦函数的多项式拟合中,不加惩罚项时,多项式的次数越高,拟合得越好,阶数较高时出现过拟合现象,是由于样本数量少但模型能力强,模型拟合结果过分依赖数据集,这种强拟合能力可能无法拟合出正弦曲线的效果。所以增大数据集可以有效地解决过拟合问题。

加入惩罚项后,过拟合现象得到改善。加入惩罚项可以有效地降低参数的绝对值,从而使模型复杂度与问题匹配。所以对于训练样本限制较多的问题,增加惩罚项是解决过拟合问题的有效手段。

在使用梯度下降时,由于我们的目标函数是二次的,只有一个极值点,即最值点,所以梯度下降的初值选取并不很重要。如果梯度下降步长设置的比较大,那么下降结果将在目标函数最值附近逐渐向上跳动,从而无法收敛。

梯度下降相比共轭梯度收敛速度很慢,迭代次数很大,而共轭梯度的稳定性较差,更容易出现过拟合现象,但对于数据量较大复杂度较高的情况,共轭梯度显然要比梯度下降来的更优。

四、参考文献

《模式识别与机器学习》

《机器学习》

参考文献

  • 基于.NET的在线考试系统的设计与实现(吉林大学·杨雪洁)
  • 偏微分方程有限差分法求解软件研发(宁夏大学·马天龙)
  • 多维数据展现开发工具的设计与实现(山东大学·展鹏)
  • 基于B/S的考卷搜索和标记系统的设计与实现(华中师范大学·沈亮)
  • 多维数据展现开发工具的设计与实现(山东大学·展鹏)
  • 基于J2EE网络考试系统的设计与实现(吉林大学·叶丽娜)
  • 基于SSH框架的软件项目管理系统的设计与实现(北京邮电大学·王萌)
  • 基于Web的负荷统计法建模平台(山东大学·刘晓宇)
  • 基于行列转换的统计功能研究与应用(中国海洋大学·张娜)
  • 双权重弹性网-逻辑回归多步筛选算法及其应用(中央财经大学·黄捷)
  • 基于Q-learning的系统集成与过程优化(青岛科技大学·魏晓彤)
  • 中学python课程知识图谱构建及应用研究(华中师范大学·黄健)
  • 基于Web的微分方程自动求解系统的研究与开发(华东师范大学·杨乐)
  • 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
  • 基于Java和Matlab的虚拟仿真实验系统的设计与实现(长江大学·喻盼)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设驿站 ,原文地址:https://bishedaima.com/yuanma/36164.html

相关推荐

  • 基于SSM框架开发的家校通

    在学校自己写的一个简单的基于 SSM 的家校通系统 本人目前是在校大学生前几个月自己自学了 ssm 开发框架并自己开发了一个简单的家校通系统, 这个系统主要分为是四个主要模块分别为老师
    2024年05月14日
    1 1 1
  • 基于Java+SSM的失物招领平台

    这是一个🔥🔥基于SSM的失物招领平台🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 失物招领平台开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于Java+SSM框架实现一个失物招领平台
    2024年05月23日
    7 1 3
  • 基于SSM的停车场管理系统的设计与实现

    基于SSM的停车场管理系统的设计与实现 摘要 自从进入21 世纪以后,汽车产业迅速发展,伴随着人们生活程度的日益进步的人口的迅速增加,汽车的数量也如雨后春笋般在城市里不断的增加
    2024年05月14日
    12 1 2
  • python数据分析

    python数据分析(7)——挖掘建模(2)聚类分析 1, 常用聚类分析算法 聚类分析建模原理 常用聚类方法 常用聚类分析算法 2
    2024年05月14日
    4 1 1
  • 人事管理系统

    这是一个🔥🔥基于SpringBoot框架的人事管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于JSP的学生信息管理系统

    Student-information-managemen 基于JSP的学生信息管理系统 参考文献 开放性实验室管理系统的设计与实现(南昌大学·刘定军) 基于JSP的辽宁大学毕业设计指导系统的设计与实现(吉林大学·王一凡) 基于J2EE的高校人力资源信息管理的设计与实现(四川大学·付明柏) 学生综合信息管理平台的设计与实现(吉林大学·刘铁刚) 基于Web的学生管理信息系统的分析和设计(厦门大学·叶露阳) 基于MVC与ASP
    2024年05月14日
    5 1 1
  • 基于ssm分布式开发实现的电商项目(聚合工程)

    基于ssm分布式开发实现的电商项目(聚合工程) 注:本项目为开源项目,不能用于商业应用,仅供学习, 1,使用工具: maven(构建项目),svn(版本控制工具)
    2024年05月14日
    2 1 1
  • Java+SSH框架实现论坛系统、javaweb+mysql

    在当今数字化时代,网络论坛系统作为在线交流的重要平台,具有广泛的应用前景,Java技术作为一种成熟,稳定的编程语言,结合SSH框架(Spring+Struts2+Hibernate)能够为论坛系统的开发提供高效
    2024年05月07日
    4 1 1
  • 基于python socket 实现的聊天室

    基于python socket 实现的聊天室 聊天室 聊天室用 python socket 实现,socket 分为客户端和服务端 服务端使用 server_socket 监听请求
    2024年05月14日
    4 1 3
  • 基于SpringBoot框架的相亲网站

    这是一份采用🔥🔥SpringBoot为核心的婚恋交友平台源代码🔥🔥,主要编程语言为Java,并结合了SpringBoot和vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    3 1 1

发表回复

登录后才能评论