一、实验要求
1. 生成数据,加入噪声;
2. 用高阶多项式函数拟合曲线;
3. 用解析解求解两种loss的最优解(无正则项和有正则项)
4. 优化方法求解最优解(梯度下降,共轭梯度);
5. 用你得到的实验数据,解释过拟合。
6. 用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。
7. 语言不限,可以用matlab,python。
求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如pytorch,tensorflow的自动微分工具。
二、对实验的理解
首先通过复习搞清楚需要干什么
曲线拟合不难理解,就是通过训练集生成一个拟合函数,从而以后通过给出数据x来预测目标数据t
三、实验步骤
1.生成数据
(为了实现拟合正弦函数,我们要生成数据,并在sinx函数的函数基础上加入噪声)
如何用Python生成数据:(基于matplotlib的python数据可视化)
(7条消息) python 可视化:fig, ax = plt.subplots()画多表图的3中常见样例 & 自定义图表格式_htuhxf的博客-CSDN博客_plt.subplots
(7条消息) 实际应用2: sin(2 * π * x)函数绘制(基于matplotlib的python数据可视化)_简时刻的博客-CSDN博客
(7条消息) 【Python】np.linspace用法介绍_Asher117的博客-CSDN博客
import numpy as np #导入numpy库,此库用于进行矩阵运算等操作 import matplotlib.pyplot as plt #导入pyplot绘图库 #例如: ax = plt.subplots():创建绘图画面 plt.show():显示画面 #x, y为两个向量,对应的x[k],y[k]则是图像上的一个点\ x = np.linspace(0.0,2.0,num=1000) #生成从0.0开始到2.0结束的50个等距向量 y = np.sin(2 * np.pi * x) # 同样是一个数列,x的sin函数,注意numpy中默认使用弧度制 x2 = np.linspace(0.0,2.0,num = 100) y2 = np.cos(2 * np.pi * x2) fig, ax1 = plt.subplots() # 创建一个绘图界面 ax2 = ax1.twinx() #让子图2与子图1的x轴一样,这样就可以在一个表中同时表示多个函数了 ax1.plot(x, y) # 在界面上使用plot方法绘制曲线 ax2.plot(x2,y2,'kx') #ax.plot(x, y, '--') # 在界面上使用plot方法绘制短线 #ax.plot(x, y, 'c*') # 在界面上使用plot方法绘制青色星号 #ax.plot(x, y, 'kx') # 在界面上使用plot方法绘制黑色叉号 #ax.plot(x, y, 'ro') # 在界面上使用plot方法绘制红色圆圈 ax1.set(xlabel='X', ylabel='Y', title='sin(x)') # 设置x轴和y轴的标签,曲线的title ax1.grid() # 显示网格 plt.show() # 显示图片 #如果在调试中,只想显示最后一张图,而这张图又和前面的坐标轴不一样(例如记录学习率的图) #那么,在前面的图中删除plt.show(),添加 plt.close() #创建最后一张图 plt.plot(x_errorList,errorList) plt.grid() plt.show()效果图:
以上只实现了简单的数据可视化,下面把生成数据封装成函数,这样就可以根据想生成数据的 范围/数据量/基本函数 来得到data了

本文通过机器学习实验1探讨多项式曲线拟合,涵盖最小二乘法(带/不带惩罚项)和梯度下降法。实验详细介绍了数据生成、噪声添加、模型求解及过拟合现象分析,使用Python进行实现。


4万+

被折叠的 条评论
为什么被折叠?



