Python实现多项式拟合正弦函数详情
作者:biyezuopinvip 发布时间:2023-04-15 09:45:20
1. 实验目的
掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2 范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本)
2. 实验要求
生成数据,加入噪声;
用高阶多项式函数拟合曲线;
用解析解求解两种 loss 的最优解(无正则项和有正则项)
优化方法求解最优解(梯度下降,共轭梯度);
用你得到的实验数据,解释过拟合。
用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。
语言不限,可以用 matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如 pytorch,tensorflow 的自动微分工具。
3. 实验内容
3.1 算法原理
本实验需要用多项式来拟合正弦函数。在 m 阶多项式中,有 m+1 个待定系数,m+1 个系数(由低到高)组成的(列)向量记作 w。要确定 w,用最小二乘法。
设 E(w) = 1/2 * (Xw – Y)^T(Xw – Y),其中,X 为多项式中各个未知项代入观测数据求得的矩阵,若记 Xi 为 X 的第 i 行的向量,则 Xi[j]为第 i 个观测数据 xi 的 j 次方,记有 n 组观测数据,多项式最高次为 m,易知 X 的维度为 n * (m+1)。Y 为观测标签向量。即 Y[j]为第 j 组观测数据的标签值(即 y 值)。从而问题转化为:求向量 w,使得 E(w)最小。
若不加入正则项,令损失函数导数为零,求 w
若加入正则项,令损失函数导数为零,求 w
加入正则项,对损失函数用梯度下降,当损失函数收敛时,求 w
加入正则项,对损失函数用共轭梯度法,循环迭代 m+1 次,求 w 3.2 算法实现 生成数据,加入噪声
用高阶多项式函数拟合曲线;
用解析解求解两种 loss 的最优解(无正则项和有正则项)
无正则项:
有正则项:
优化方法求解最优解(梯度下降,共轭梯度)
梯度下降法:
共轭梯度法:
用你得到的实验数据,解释过拟合。
多项式次数为 1 时:
多项式次数为 3 时:
当多项式次数为 5 时:
当多项式次数为 7 时:
当多项式次数为 9 时:
来源:https://blog.csdn.net/newlw/article/details/126084448


猜你喜欢
- 前提:list以及array是python中经常会用到的数据类型,当需要对list以及array进行文件的读写操作的时候,由于write函数
- 几个常用的js小函数,在表单验证时也许您用得到:一检查是否是email地址,二检查是否为数字,三检查是否为电话号码,四检查num是否是负数或
- 【问】使用FCKeditor添加文章时,在文章最后多了逗号。【答】此情况发生在asp环境中。在asp里对于 提交的表单信息中如果有相同nam
- 在用 Javascript 验证表单(form)中的单选框(radio)是否选中时,很多新手都会遇到问题,原因是 radio 和普通的文本框
- 一个协程里可以启动另外一个协程,并等待它完成返回结果,采用await关键字,例子如下:import asyncioasync def out
- 前言:前两天用Python实现了ftp服务器。在小项目中就用到了反射。因此写个笔记巩固下。反射的定义:检测和修改它本身状态或行为的一种能力(
- 项目开发中,代码管理肯定离不开git操作,Pycharm中没有复杂的命令操作,只需要进行一些简单的菜单操作就可以方便的实现版本管理,下面分别
- def cndebug(obj=False): """ Author : Nemon Update : 200
- Python优越的灵活性和易用性使其成为最受欢迎的编程语言之一,尤其是对数据科学家而言。 这在很大程度上是因为使用Python处理大型数据集
- 一、requests库1、requests简介requests库就是一个发起请求的第三方库,requests允许你发送HTTP/1.1 请求
- 本周的豆知识分享就来深入研究一下window.event对象。请先看看下边的代码片断。 <button id=”btn”&g
- 本文实例讲述了JS+HTML5 canvas绘制验证码。分享给大家供大家参考,具体如下:css样式:<style>body{ &
- 1. 基础缩略图给a标签添加类class="thumbnail"如下:<div class="
- 1.数据采集和标记先采集数据,再对数据进行标记。其中采集数据要就有代表性,以确保最终训练出来模型的准确性。2.特征选择选择特征的直观方法:直
- 我们都知道打开文件有两种方法:f = open()with open() as f:这两种方法的区别就是第一种方法需要我们自己关闭文件;f.
- 前言前面我们已经介绍了 python面向对象入门教程之从代码复用开始(一) ,这篇文章主要介绍的是关于Python面向对象之设置对
- defer介绍defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… c
- 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了
- 第一种np矩阵可以直接与标量运算>>>import numpy as np>>>arr1 = np.ar
- 近期公司准备开发一个计费项目,数据库当然还是选用我最信赖的Oracle了。由于一部分基础数据在一台Win2000 Server的S