【pytorch01】简单回归问题

news2024/11/22 19:27:14

1.梯度下降(Gradient Descent)

梯度下降
y = x 2 ∗ s i n ( x ) y=x^{2}*sin(x) y=x2sin(x)
y ′ = 2 ∗ x ∗ s i n ( x ) + x 2 ∗ c o s ( x ) y'=2*x*sin(x) + x^{2}*cos(x) y=2xsin(x)+x2cos(x)
求最小值要求导

梯度下降定义:梯度下降要迭代计算,每一次得到一个导数以后,用原来的x减去该x处导数的值,得到一个新的x的值就是这样一个迭代的过程

x t = x t − 1 − η ∂ y ∂ x t − 1 x_{t}=x_{t-1}-η\frac{\partial{y}}{\partial x_{t-1}} xt=xt1ηxt1y

η就是learning rate(学习率),可以通过调整学习率够使目标函数在合适的时间内收敛到局部最小值。

  • y = w ∗ x + b y=w*x+b y=wx+b
    • 1.567 = w ∗ 1 + b 1.567 = w * 1 + b 1.567=w1+b
    • 3.043 = w ∗ 2 + b 3.043 = w * 2 + b 3.043=w2+b

w = 1.477
b = 0.089
通过消元法,此时w和b是一个准确解,被称之为Closed Form Solution

其实现实生活中可以精确求解的东西不多,我们现实生活中拿到的数据都是有一定偏差的,因此对于实际的问题,与其说求一个Closed Form Solution(封闭解),不如求得一个近似解,这个近似解在经验上可行,这样就可以达到我们的目的

用高斯噪声(均值为0.01,方差为1)模仿偏差(现实生活中拿到的数据都是带有一定噪声的)
y = w ∗ x + b + ϵ y=w *x+b + \epsilon y=wx+b+ϵ
ϵ ∼ N ( 0.01 , 1 ) \epsilon\sim N(0.01,1) ϵN(0.01,1)
1.567 = w ⋆ 1 + b + e p s 3.043 = w ⋆ 2 + b + e p s 4.519 = w ⋆ 3 + b + e p s . . . 1.567=w^{\star}1+b+eps\\3.043=w^{\star}2+b+eps\\4.519=w^{\star}3+b+eps\\... 1.567=w1+b+eps3.043=w2+b+eps4.519=w3+b+eps...
观测一组数据,通过观测这一组数据来求解,这一组数据中整体表现比较好的解,虽然不是Closed Form Solution,但是证明了有良好的表现,可以达到需求。

y = x 2 ∗ s i n ( x ) y=x^{2}*sin(x) y=x2sin(x)使用梯度下降算法是求这个函数的最小值

但是对于 y = w ∗ x + b y=w*x+b y=wx+b这个方程来说并不是要求y的最小值,而是要求真实的y和 w ∗ x + b w*x+b wx+b的差最小,因为希望 w ∗ x + b w*x+b wx+b更加接近真实的y的值

可以通过求 l o s s = ( w ∗ x + b − y ) 2 loss=(w*x+b -y)^2 loss=(wx+by)2的极小值,可以达到接近的目的,获取此时的w和b的值

图片

2.实战

l o s s = ( W X + b − y ) 2 loss=(WX+b-y)^2 loss=(WX+by)2

# 返回average loss
def compute_error_for_line_given_points(w,b,points):
    lossTotal = 0
    for i in range(len(points)):
        x = points[i,0]
        y = points[i,1]
        lossTotal += (y - (w * x + b))** 2
    return lossTotal / float(len(points))

w ′ = w − l r ∗ ∇ l o s s ∇ w w'=w-lr*\frac{\nabla loss}{\nabla w} w=wlrwloss

# 要求loss的极小值,对w和b分别梯度下降
def step_gradient(b_current,w_current,points,learningRate):
    b_gradient = 0
    w_gradient = 0
    N = float(len(points))
    for i in range(len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # loss函数分别对w和b求导
        # 多了N的原因是因为对所有点的导数累加起来,这样就不用做average了
        # 此时获得的w和b是所有点average之后的梯度
        w_gradient += -(2/N) * x * (y - (w_current * x + b_current))
        b_gradient += -(2/N) * (y - (w_current * x + b_current))
    new_b = b_current - (learningRate * b_gradient)
    new_w = w_current - (learningRate * w_gradient)
    return [new_w,new_b]

经过多次梯度下降得到最优解

def gradient_descent_runner(points,starting_w,starting_b,
                            learning_rate,num_iterations):
    w = starting_w
    b = starting_b
    for i in range(num_iterations):
        w,b = step_gradient(w,b,np.array(points),learning_rate)
    return [w,b]
def run():
    points = np.genfromtxt("data.csv",delimiter=",")
    print(points[:10])
    learning_rate = 0.0001
    initial_w = 0
    initial_b = 0
    num_iterations = 1000
    print("Starting gradient descent at w = {0},b = {1},error = {2}"
          .format(initial_w,initial_b,compute_error_for_line_given_points(initial_w,initial_b,points)))

    print("Running...")
    [w,b] = gradient_descent_runner(points,initial_w,initial_b,learning_rate,num_iterations)
    print("After {0} iterations w = {1},b = {2},error = {3}"
          .format(num_iterations,w, b,
                  compute_error_for_line_given_points(w, b, points)))

if __name__ == '__main__':
    run()

结果
最终的数据与Closed Form Solution非常接近

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840750.html

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

相关文章

矿用行程位移传感器传感器ZE0701-06CU

矿用行程传感器概述 矿用行程传感器是一种专为煤矿等特定环境设计的传感器,用于监测和测量设备或部件的位移量。它们通常用于液压支架、千斤顶、掘进机等矿山设备中,帮助监测和控制设备的运动状态,以确保安全和高效的生产。 定义和功能 矿用…

异构集成封装类型2D、2.1D、2.3D、2.5D和3D封装技术

异构集成封装类型:2D、2.1D、2.3D、2.5D和3D封装详解 简介随着摩尔定律的放缓,半导体行业越来越多地采用芯片设计和异构集成封装来继续推动性能的提高。这种方法是将大型硅芯片分割成多个较小的芯片,分别进行设计、制造和优化,然后…

算法金 | 再见!!!梯度下降(多图)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 接前天 李沐:用随机梯度下降来优化人生! 今天把达叔 6 脉神剑给佩奇了,上 吴恩达:机器…

Python接口测试实战之搭建自动化测试框架

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一.数据分离:从Excel中读取数据 之前的用例中,数据直接写在代码文件里,不…

OpenAI新模型发布,免费开放GPT-4o!但只开放一点点...

GPT-4o 中的“o”代表“omni”——指的是 GPT-4o 的多模态。 该模型将向免费客户开放,这意味着任何人都可以通过 ChatGPT 访问 OpenAI 最先进的技术。 GPT-4o 是 OpenAI 昨天晚上发布的新旗舰模型,可以实时推理音频、视觉和文本。 据官方介绍&#xff0…

椭圆的标准方程与协方差矩阵的特征值和特征向量的关系

椭圆的标准方程与协方差矩阵的特征值和特征向量的关系 flyfish 单位圆 :单位圆表示在标准正交基下的分布。 椭圆 :通过协方差矩阵的特征向量和特征值变换得到的椭圆,表示数据在新的坐标系下的分布。 特征向量 :红色箭头表示特征…

【C语言】一维数组(详解)

目录 1. 数组的概念 2. 一维数组的创建和初始化 3. 一维数组的使用 4. 一维数组在内存中的存储 5. sizeof 计算数组元素个数 正文开始—— 1. 数组的概念 数组是一组相同类型元素的集合。 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。…

运算放大器(运放)同相放大器电路

设计目标 输入电压ViMin输入电压ViMax输出VoMin输出VoMax电源Vcc电源Vee-1V1V-10V10V15V–15V 设计说明 这种设计将输入信号 Vi 放大,信号增益为 10V/V。输入信号可能来自高阻抗源(例如 MΩ),因为该电路的输入阻抗由运算放大器…

vue3delete请求报403forbidden,前后端解决方式,cookie无效问题

在做开发时,前期已经在Controller类加上CrossOrigin(origins "*"),发送get和post请求都没问题,但遇到delete请求时,又报出跨域问题 一.前端添加proxy代理服务器(未能解决) 在vue.config.js中使…

PHP转Go系列 | 字符串的使用姿势

大家好&#xff0c;我是码农先森。 输出 在 PHP 语言中的输出比较简单&#xff0c;直接使用 echo 就可以。此外&#xff0c;在 PHP 中还有一个格式化输出函数 sprintf 可以用占位符替换字符串。 <?phpecho 码农先森; echo sprintf(码农:%s, 先森);在 Go 语言中调用它的输…

pikachu靶场之XSS漏洞测试

一、环境配置 1.pikachu官网下载 下载地址&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 2.百度网盘&#xff08;里面含有pikachu跟phpstudy&#xff09; 链接&#xff1a;pikachu下载 密码&#xff1a;abcd 配置&#xff1a;pikachu下载及安装-图文详解…

14K屏FPGA通过MIPI接口点亮

一、屏参数 屏分辨率为13320*5120&#xff0c;MIPI接口8 LANE。 二、驱动接口电路 屏偏置电压5.5V&#xff0c;逻辑供电1.8V。8 LANE MIPI&#xff0c;2 PORT。 三、MIPI DSI规范 DCS (Display Command Set)&#xff1a;DCS是一个标准化的命令集&#xff0c;用于命令模式的显…

基于单片机的智能窗户控制系统的设计

摘 要&#xff1a; 根据单片机技术和现代传感器技术 &#xff0c; 本文主要针对基于单片机的智能窗户控制系统的设计进行探讨 &#xff0c; 仅供参考 。 关键词&#xff1a; 单片机 &#xff1b; 智能窗户 &#xff1b; 控制系统 &#xff1b; 设计 在现代科学技术持续发展的带…

融资融券两融利率最低多少?两融利率最低账户怎么申请?

融资融券账户余额理财技巧 融资融券账户不支持货币基金申赎、逆回购等业务&#xff0c;投资者可以将资金大于维保比例300%的部分通过银证转账转出再转入到普通账户&#xff0c;参与证券公司现金理财或逆回购等业务。 融券卖出和还券技巧 融券卖出所得的资金仅能用于买券还券&…

Linux操作系统学习:day05

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0530、删除用户31、添加和删除用户组创建用户组删除用户组 32、修改密码33、使用tar工具进行压缩和解压缩压缩解压缩 34、使用zip u…

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch4 值迭代 与 策略迭代 【动态规划 算法】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、过 电子书 补充 【下载&#xff1a; 本章 PDF 电子书 GitHub】 [又看了一遍视频。原来第一次跳过了好多内容。。。] 3、总体 MOOC 过一遍 习题 学堂在线 课程页面链接 中国大学MOOC 课程页面链…

【宠粉赠书】科技图表绘制:R语言数据可视化

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套科研绘图的必备书籍——《R语言数据可视化&#xff1a;科技图表绘制》。下面我会详细给大家介绍这套图书&#xff0c;文末留有领取方式。 图书介绍 《R语言数据可视化&#xff1a;科技图表绘制》结合编者多年的数据分析…

jenkins安装和使用 (二)

参考视频资料 https://www.bilibili.com/video/BV1bS4y1471A?p10&vd_sourcee0dcd147bd5d730317de804d788cd6f9 安装maven插件 新建item 配置构建信息 项目地址替换为自己的实际地址 其余保持先保持默认 先然后在主页就看到了这个项目 查看控制台输出 稍等一…

Java 17的新特性

Java 17引入了多项新特性&#xff0c;以下是一些重要的更新&#xff1a; 增强的伪随机数生成器&#xff08;JEP 356&#xff09; Java 17为伪随机数生成器&#xff08;PRNG&#xff09;提供了新的接口类型和实现&#xff0c;包括可跳转的PRNG和另一类可拆分的PRNG算法&#xf…

聊聊 Mybatis 动态 SQL

这篇文章&#xff0c;我们聊聊 Mybatis 动态 SQL &#xff0c;以及我对于编程技巧的几点思考 &#xff0c;希望对大家有所启发。 1 什么是 Mybatis 动态SQL 如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼…