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

news2024/11/13 10:15:12

  首先考虑 y y y为标量, w w w为标量的情况,那么我们的线性函数为 y = w x + b y=wx+b y=wx+b。每批输入的量batch size 为 1 1 1,每批输入的 x x x为一个标量,设为 x ∗ x^* x,标签 y y y同样为一个标量,设为 y ∗ y^* y。因此每批训练的损失函数 L L L可以表示为:
L = ( y − y ∗ ) 2 = ( w x ∗ + 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
  每次训练完需要更新参数 w w w b b b,我们采用梯度下降方法对这两个参数进行更新的话,需要求出两个参数的梯度,也就是需要求出 ∂ L ∂ w \frac{\partial{L}}{\partial{w}} wL ∂ L ∂ b \frac{\partial{L}}{\partial{b}} bL,结果如下:
∂ L ∂ w = 2 ( w x ∗ + b − y ∗ ) x ∗ \frac{\partial{L}}{\partial{w}}=2(wx^*+b-y^*)x^* wL=2(wx+by)x
∂ L ∂ b = 2 ( w x ∗ + b − y ∗ ) \frac{\partial{L}}{\partial{b}}=2(wx^*+b-y^*) bL=2(wx+by)
训练之前需要对 w w w b b b初始化赋值,设定步长 s t e p step step。这样每轮 w w w b b b的更新方法为:
w n e w = w − s t e p ∗ 2 ( w x ∗ + b − y ∗ ) x ∗ w_{new}=w-step*2(wx^*+b-y^*)x^* wnew=wstep2(wx+by)x
b n e w = b − s t e p ∗ 2 ( w x ∗ + b − y ∗ ) b_{new}=b-step*2(wx^*+b-y^*) bnew=bstep2(wx+by)
首先考虑 y y y为标量, w w w为标量的情况,那么我们的线性函数为 y = w x + b y=wx+b y=wx+b。每批输入的量batch size 为 N N N,每批输入的 x x x为一个向量,设为 x ∗ \boldsymbol{x}^* x,标签 y y y同样为一个向量,设为 y ∗ \boldsymbol{y}^* y。因此损失函数可以表示为:
L = ∑ n = 1 N ( y − y ∗ ) 2 = ∑ n = 1 N ( 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]
    # 计算当前loss
    loss_list.append((w*cx+b-cy)**2)
    # 计算参数w和b的梯度
    grad_w = 2*(w*cx+b-cy)*cx
    grad_b = 2*(w*cx+b-cy)
    # 更新w和b的值
    w -= step*grad_w
    b -= 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.coloradmin.cn/o/391791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直线模组的优势是什么?

直线模组是可以模拟人工操作的一些功能,通过固定程序来进行抓取,搬运、操作工具,实现自动变速,这也是为何直线模组使用率高的主要原因了,那么直线模组究竟有着怎样的优势呢? 1、整体结构紧凑,重…

k8s-Kubernetes集群部署

文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…

Spark 磁盘作用

Spark 磁盘作用磁盘作用性能价值失败重试ReuseExchangeSpark 导航 磁盘作用 临时文件、中间文件、缓存数据,都会存储到 spark.local.dir 中 在 Shuffle Map 时, 当内存空间不足,就会溢出临时文件存储到磁盘上溢出的临时文件一起做归并计算…

Vue3---语法初探

目录 hello world 实现简易计时显示 反转字符串 显示隐藏 了解循环 了解双向绑定实现简易记事 设置鼠标悬停的文本 组件概念初探,进行组件代码拆分 hello world 最原始形态,找到 id 为 root 的标签,将 Vue 实例的模板放入标签之内 …

剑指 Offer 09. 用两个栈实现队列(java)

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQu…

SpringBoot中一行代码解决字符串向枚举类型转换的问题

1. 场景 在WEB开发,客户端和服务端传输的数据中经常包含一些这样的字段:字段的值只包括几个固定的字符串。 这样的字段意味着我们需要在数据传输对象(Data Transfer Object, DTO)中对该字段进行校验以避免客户端传输的非法数据持…

Android Service知识

一. 概览 Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC…

你是真的“C”——为冒泡排序升级赋能!

你是真的“C”——为冒泡排序升级赋能!😎前言🙌冒泡排序升级赋能之境界一!冒泡排序升级赋能之境界二!qsort库函数的运用和认识总结撒花💞😎博客昵称:博客小梦 😊最喜欢的…

【CDP】更改solr 存储路径导致ranger-audit 大量报错问题解决

前言 我们生产上公司是使用的CDP集群,一次管理员通知,Solr 组件的数据存放路径磁盘空间不够。 我们的solr 组件时为 Ranger 服务提供日志审计功能, 在我们更改了磁盘路径,并重启了Solr 组件,然后发现相关组件&#…

基于Python的selenium

一、安装 1.1安装Python,安装Python时需要勾选增加环境变量 如果之前已经安装过Python,需要将Python相关文件以及环境变量删除 1.2安装成功:在命令行界面下输入Python,最终展示>>>即可成功 2.1安装pycharm,直接自定义安装…

论文阅读-(GLIP)Grounded Language-Image Pre-training (目标检测+定位)

Paper:Grounded Language-Image Pre-training Code:https://github.com/microsoft/GLIP 简介: 定位任务与图像检测任务非常类似,都是去图中找目标物体的位置,目标检测为给出一张图片找出bounding box,定位…

07react+echart,大屏代码开发

react框架引入第三方插件原链接gitHub:GitHub - hustcc/echarts-for-react: ⛳ Apache ECharts components for React wrapper. 一个简单的 Apache echarts 的 React 封装。import ReactECharts from echarts-for-react;import * as echarts from echarts;一、软件简介echarts-…

微机原理和计算机组成原理复习

1:冯诺依曼机器的主要特点? 1)计算机由运算器、存储器、控制器、输入设备和输出设备五大部分组成; 2)指令和数据存储在存储器中,并可以按地址访问; 3)指令和数据均以二进制表示&…

2023年软考中级信息安全工程师考什么?

信息安全工程师是属于软考中级科目,含金量很高的,信息安全工程师在社会上的需求是蛮大的。 信息安全工程师主要涉及计算机信息安全方面,在计算机软硬件、网络、应用相关领域从事安全系统设计、安全产品开发、产品集成、信息系统安全检测与审计…

小程序容器作为软件中间件技术不可忽视的价值

随着移动互联网的不断发展,越来越多的应用程序被广泛应用于各种行业和领域中。然而,不同的平台和设备之间的差异性和复杂性,给应用程序的开发和部署带来了很大的挑战。这时,小程序容器作为软件中间件技术的其中一环,成…

格密码学习笔记(三):闵可夫斯基第一定理

文章目录NNN维超球体体积结论闵可夫斯基凸体定理闵可夫斯基第一定理闵可夫斯基第二定理致谢NNN维超球体体积结论 在nnn维空间中,对半径为rrr的超球体(Ball),有vol(B(0,r))≥(2rn)n\mathrm{vol}(\mathcal{B}(0, r)) \geq \left( \…

java基础:浅聊实例化和初始化

其实如果了解python的化,其在生成一个实例对象的时候会调用两个系统方法__new__ 和__init__。 这个可以通过看生成的class文件看到,比如创建一个test.java,然后通过jclasslib这个软件查看class文件,当然ide也可以安装这个软件的插…

ggplot2的组图拓展包(1):patchwork(上篇)

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集patchwork是ggplot绘图系统的拓展包,主要功能是将多个ggplot格式的图形组合成一幅大图,即组图。patchwork工具包十分好用,它主要利用几个类似四则运算符号的操作符进行组图&…

Python——函数(重点内容)

函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫…

Linux 常用软件安装(jdk,redis,mysql,minio,kkFileView)

1.jdk安装 查询所有跟Java相关的安装的rpm包 rpm -qa | grep java卸载所有跟openjdk相关的包: 执行命令。删除以上除了noarch 结尾的所有文件 rpm -e --nodeps java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0…