手动用梯度下降法和随机梯度下降法实现一元线性回归

news2024/11/26 2:27:21

手动用梯度下降法实现一元线性回归

原文链接:https://www.cnblogs.com/qimoxuan/p/18407823

实验目的

本次实验旨在通过手动实现梯度下降法和随机梯度下降法来解决一元线性回归问题。具体目标包括:

  1. 生成训练数据集,并使用matplotlib进行可视化。
  2. 设计一个`LinearModel`类来实现一元线性回归的批量梯度下降法。
  3. 使用matplotlib显示拟合结果。
  4.  修改`LinearModel`类来实现随机梯度下降法,并重复上述实验步骤。

实验环境

Python版本:3.x
库:NumPy, Matplotlib

实验步骤

步骤1:准备数据

  1. 生成100个训练样本,其中自变量X取值服从均值为0,方差为1的正态分布。
  2. 设定因变量Y的关系式为Y = 4X + 3 + e_{r},其中e_{r}为误差项,取值服从均值为0,方差为1的正态分布。
  3. 使用Matplotlib绘制生成的数据点。
import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子以保证结果可复现
np.random.seed(0)

# 生成100个训练样本
X = np.random.normal(loc=0, scale=1, size=100)  # X服从N(0,1)
e_r = np.random.normal(loc=0, scale=1, size=100)  # 误差项e_r服从N(0,1)
Y = 4 * X + 3 + e_r  # Y = 4*X + 3 + e_r

# 使用matplotlib显示生成的数据
plt.figure(figsize=(8, 6))
plt.scatter(X, Y, color='blue', label='Actual Data')
plt.title('Generated Data for Linear Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True)
plt.show()

步骤2:定义LinearModel类

  1. 定义一个`LinearModel`类,包含模型初始化、前向传播、损失计算、梯度计算和参数更新等方法。
  2. 在类中实现批量梯度下降法的训练逻辑,通过设置最大迭代次数或验证集错误率来停止迭代。
class LinearModel:
    def __init__(self):
        self.w = n

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

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

相关文章

Mac清理其他文件:释放存储空间的高效指南

每个Mac用户都可能遇到存储空间不足的问题,尤其是当“其他”文件积累到一定体积时。在Mac上,“其他”文件通常包括各种系统文件、缓存、文档以及不被归类为应用程序、照片、电影或音乐的其他类型的文件。这些文件往往不易被注意,但逐渐占用了…

Java-idea小锤子图标

这一版的idea小锤子图标其实就在这里 点进去就找到了~

基于C#+SQL Server2008 开发三层架构(CS界面)图书管理系统

图书管理系统 一、项目背景及意义 当今由于信息技术的飞速发展,图书馆作为社会知识信息媒介的功能日益重要,网络环境下的信息资源建设知识仓库的设计,开放存取学术交流模式,知识管理系统,智能检索,数字参…

unocss 一直热更新打印[vite] hot updated: /__uno.css

控制台持续打印了几千条这条信息,页面逐渐卡死 client.ts:450 [vite] hot updated: /__uno.css 找出的原因是:依赖出问题了,重新安装unocss, 执行命令 npm i unocss 后修复。 但奇怪的是,删除node_modules重新全部安装…

一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus

uniapp-vue3-template 一个简约的uniapp登录界面,基于uniappvue3uview-plus 页面主要包括:用户登录,手机验证码登录,用户注册,重置密码等页面 登录进去后为空白模板 源码在文末 界面 源码 uniapp登录界面源码

CyberDAO·S级市场旅游研讨会:川西之行圆满落幕

穿越人海 走进川西 在这个特别的秋天,CyberDAO组织了一场集结S级精英的“川西之旅”。此次研讨会不仅是DAO成员的一次盛大聚会,更是一场集会议、团队凝聚力提升和文化生活体验为一体的全方位旅程。2024年9月7日-10日,这支团队横跨山川湖海&a…

AttackGen - AI 网络安全事件响应测试工具,附下载链接

为了提高我们团队在安全活动中的响应效率,我关注到了一款叫 AttackGen 的工具,我们需要的是一个既能快速生成场景又能准确反映现实威胁的工具。 在红蓝对抗中,我们经常要模拟各种攻击场景,以测试我们的防御水平。这不仅仅是为了“…

【 C++ 】模板初阶

目录 ​编辑 一、泛型编程 二、函数模板 1.概念 2.格式 3.原理 4.匹配原则 三、类模板 1.定义格式 2.类模板的实例化 一、泛型编程 泛型编程是一种编程范式,它允许在编写代码时使用一种通用的数据类型或算法,以便在不同的数据类型上进行操作&…

如何将QAD系统EDI模块无缝迁移到知行之桥?

什么是QAD系统? QAD(Quality, Applications, Development)系统,是专为制造业设计的一款ERP软件,主要包含供应链管理、生产管理、财务和客户管理等业务功能,这家公司1979年成立于美国,目前在汽车…

STM32高级定时器实现:两路互补PWM输出,精准死区时间控制

目录 1. 实验目的: 2. 理论知识储备 2.1什么是互补输出? 2.2什么是死区控制,有什么用? 2.3参考手册的介绍 2.4了解死区寄存器(TIMx_BDTR) 3. 软件实现 3.1GPIO配置: 3.2TIM1初始化: 3.3主函数(main) 4. 实验…

NASA数据集:ASTER L2 地表辐射率 - VNIR 和串扰校正 SWIR V003

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ASTER L2 Surface Radiance - VNIR and Crosstalk Corrected SWIR V003 简介 ASTER 地表辐射度可见近红外和串扰校正 SWIR (AST_09XT) 是一个多文件产品 (https://lpdaac.usgs.gov/documents/996/A…

第二证券:这一板块大幅吸金!

9月10日,华为、苹果两大手机品牌的新机型一起发布,A股通讯设备板块获资金大幅流入。 在9月10日的新品发布会上,苹果推出了最新的iPhone 16系列,而华为则发布了新品Mate XT特殊大师。两大科技巨子几乎一起发布新品,灵敏…

基于Linux和C++实现的RabbitMQ风格消息队列:设计与实现

文章目录 0. 前言1. 需求分析① 核心部分② 核心API③ 交换机类型④ 持久化⑤ 网络通信⑥ 消息应答 2. 模块划分Ⅰ 服务端模块① 持久化数据管理中心模块② 虚拟机管理模块③ 交换机路由模块④ 消费者管理模块⑤ 信道管理模块⑥ 连接管理模块⑦ Broker Server模块 Ⅱ 客户端模块…

Android 生成so库 并调用

第一步:创建so库 第二步:看一下Native的项目结构 自动生成引用文件build.gradle(app) externalNativeBuild {cmake {path file(src/main/cpp/CMakeLists.txt)version 3.22.1}} //每个版本的开发工具不一样 我这个是自动生成的so库…

揭秘消防电动开窗机:一键开启生命通道

揭秘消防电动开窗机:一键开启生命通道 在城市的钢铁森林中,高楼大厦如雨后春笋般涌现,为现代生活带来了前所未有的便利与繁华。然而,当火灾等突发事件来临时,这些高耸的建筑也成了逃生与救援的巨大挑战。在这关键时刻&…

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等,提供瑞芯微RK3566、RK3568、RK3588…

重置turtle坐标及方向为初始值的Python函数:turtle.home()

【重置turtle坐标及方向为初始值的Python函数:turtle.home()】 import turtle as t t.setup(300,300,10,10) t.turtlesize(5,8) t.pensize(1) t.pencolor("red") t.left(60) t.forward(100) t.home()【代码分析】● 重置turtle坐标及方向为初始值的Pytho…

社区团购系统开发,小程序源码(团长中心、社区拼团、限时秒杀等)

前言 在数字化时代,社区团购作为一种新兴的购物方式,以其便捷、实惠的特点迅速赢得了消费者的青睐。 一、社区团购的基本概念 社区团购是一种基于社区的集体购买模式,通过线上平台组织社区居民集体采购商品,以团购的形式从供应商…

Go常用算法集锦

前言 在日常开发中,我们经常会遇到一些针对复杂数据的处理,这时我们就会针对不同的业务使用不同算法,减少代码的逻辑复杂度,增加项目的可维护性,而为了保障项目的可持续性,一般都会进行算法的封装&#xf…

适配器模式详解和源码中应用

适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,它的作用是将一个类的接口转换为客户端所期望的另一种接口。适配器模式让原本接口不兼容的类能够合作无间,常用于将新系统集成到旧系统中。 形象的例子&#xff1a…