当前位置: 首页 > news >正文

最简单的线性回归模型-标量

  首先考虑yyy为标量,www为标量的情况,那么我们的线性函数为y=wx+by=wx+by=wx+b。每批输入的量batch size 为111,每批输入的xxx为一个标量,设为x∗x^*x,标签yyy同样为一个标量,设为y∗y^*y。因此每批训练的损失函数LLL可以表示为:
L=(y−y∗)2=(wx∗+b−y∗)2\begin{aligned} L&=\left(y-y^*\right)^2\\ &=\left(wx^*+b-y^*\right)^2\\ \end{aligned} L=(yy)2=(wx+by)2
  每次训练完需要更新参数wwwbbb,我们采用梯度下降方法对这两个参数进行更新的话,需要求出两个参数的梯度,也就是需要求出∂L∂w\frac{\partial{L}}{\partial{w}}wL∂L∂b\frac{\partial{L}}{\partial{b}}bL,结果如下:
∂L∂w=2(wx∗+b−y∗)x∗\frac{\partial{L}}{\partial{w}}=2(wx^*+b-y^*)x^* wL=2(wx+by)x
∂L∂b=2(wx∗+b−y∗)\frac{\partial{L}}{\partial{b}}=2(wx^*+b-y^*) bL=2(wx+by)
训练之前需要对wwwbbb初始化赋值,设定步长stepstepstep。这样每轮wwwbbb的更新方法为:
wnew=w−step∗2(wx∗+b−y∗)x∗w_{new}=w-step*2(wx^*+b-y^*)x^*wnew=wstep2(wx+by)x
bnew=b−step∗2(wx∗+b−y∗)b_{new}=b-step*2(wx^*+b-y^*)bnew=bstep2(wx+by)
首先考虑yyy为标量,www为标量的情况,那么我们的线性函数为y=wx+by=wx+by=wx+b。每批输入的量batch size 为NNN,每批输入的xxx为一个向量,设为x∗\boldsymbol{x}^*x,标签yyy同样为一个向量,设为y∗\boldsymbol{y}^*y。因此损失函数可以表示为:
L=∑n=1N(y−y∗)2=∑n=1N(y−y∗)2\begin{aligned} L&=\sum_{n=1}^{N}\left(y-y^*\right)^2\\ &=\sum_{n=1}^{N}\left(y-y^*\right)^2\\ \end{aligned} L=n=1N(yy)2=n=1N(yy)2
下面我们对这种最简单的线性回归模型使用python实现一下:

x = np.array([0.1,1.2,2.1,3.8,4.1,5.4,6.2,7.1,8.2,9.3,10.4,11.2,12.3,13.8,14.9,15.5,16.2,17.1,18.5,19.2])
y = np.array([5.7,8.8,10.8,11.4,13.1,16.6,17.3,19.4,21.8,23.1,25.1,29.2,29.9,31.8,32.3,36.5,39.1,38.4,44.2,43.4])
print(x,y)
plt.scatter(x,y)
plt.show()

在这里插入图片描述
回归过程如下:

# 设定步长
step=0.001
# 存储每轮损失的loss数组
loss_list=[]
# 定义epoch
epoch=30
# 定义参数w和b并初始化
w=0.0
b=0.0
#梯度下降回归
for i in range(epoch) :#计算当前输入x和标签y的索引,由于x和y数组长度一致,因此通过i整除x的长度即可获得当前索引index = i % len(x)# 当前轮次的x值为:cx=x[index]# 当前轮次的y值为:cy=y[index]# 计算当前lossloss_list.append((w*cx+b-cy)**2)# 计算参数w和b的梯度grad_w = 2*(w*cx+b-cy)*cxgrad_b = 2*(w*cx+b-cy)# 更新w和b的值w -= step*grad_wb -= step*grad_b

输出loss如下:

plt.plot(loss_list)
plt.show()

在这里插入图片描述
输出拟合函数的结果:

print("y=%.2fx+%.2f" %(w,b))
y=2.46x+0.39

拟合的函数图像与训练数据中的点关系图如下:
在这里插入图片描述
可以看到迭代30次后的函数图像,现在迭代次数增加到3000,拟合结果如下:
在这里插入图片描述
loss如下:
在这里插入图片描述

在batchsize为1的时候,loss波动很大。因此有必要增大batchsize,下一篇我们在此基础上增加batchsize看看线性回归的结果。

http://www.lryc.cn/news/32389.html

相关文章:

  • k8s-Kubernetes集群升级
  • Linux25 -- 监听队列链接上限测试、命令uname、ulimit
  • idea:地址被占用
  • JavaScript常用小技巧(js优化)
  • 【项目实战】MySQL 5.7中的关键字与保留字详解
  • Git图解-常用命令操作
  • LeetCode096不同的二叉搜索树(相关话题:卡特兰数)
  • 软件测试7
  • 12 结构:如何系统设计框架的整体目录?
  • 假如你知道这样的MySQL性能优化
  • 79、ClimateNeRF: Physically-based Neural Rendering for Extreme Climate Synthesis
  • 前端面试题(一)
  • Java基础常见面试题(七)
  • 【springmvc】报文信息转换器
  • 3.5知识点复习
  • 湖南中创教育PMP分享项目经理有哪些优势?
  • LeetCode:27. 移除元素
  • 麻雀算法SSA优化LSTM长短期记忆网络实现分类算法
  • 哈希表题目:数组中的 k-diff 数对
  • SAP ERP系统PP模块计划策略2050详解
  • TIA博途中将硬件目录更改为中文的具体方法演示
  • 【多线程操作】线程池模拟实现
  • HBase---Hbase安装(单机版)
  • 启动项管理工具Autoruns使用实验(20)
  • BFD单臂回声实验详解
  • 详解JAVA类加载器
  • 记录一些常用C标准库函数,以及Linux系统调用函数的作用(不断更新)
  • RK3568平台开发系列讲解(显示篇)DRM的atomic接口
  • 2022年MathorCup数学建模C题自动泊车问题解题全过程文档加程序
  • 【需求响应】基于数据驱动的需求响应优化及预测研究(Matlab代码实现)