机器学习实验1 - 多项式曲线拟合

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

一、实验要求

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了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值