机器学习-使用梯度下降最小化均方误差

前面有一篇文章《机器学习-常用的三种梯度下降法》,这篇文章中对于均方误差的求偏导是错误的,为了澄清这个问题,我再写一篇文章来纠正一下,避免误导大家。

一、批量梯度下降法

我们用 批量梯度下降法 来求解一个简单的 线性回归模型,找出最优参数。

假设问题:

假设我们有以下训练数据集(假设是某个小型房屋面积与价格的关系):

房屋面积 (平方英尺) x房屋价格 (万元) y
13
25
37
49

我们假设线性模型的形式为:

y=wx+b

我们的目标是找到参数 w(权重) 和 b(偏置),使得预测值 y^最接近真实值 y。

步骤 1:定义损失函数(均方误差 MSE)

批量梯度下降法的目标是最小化损失函数,常见的损失函数是 均方误差(MSE):

其中:

  • mm 是样本数量(本例中 m=4)
  • x_i 是输入特征
  • y_i 是实际输出
  • w 是模型权重,b 是偏置

步骤 2:计算损失函数的梯度

对损失函数 J(w,b)进行求导,得到偏导数(梯度):

步骤 3:更新参数公式

使用批量梯度下降法,按照以下公式更新参数:

其中:

  • α 是学习率(如 0.01 或 0.1),控制每次更新的步长
  • 梯度值表示损失函数对参数 w 和 b 的变化率

步骤 4:具体计算示例(手算)

假设初始参数:

  • w=0, b=0
  • 学习率 α=0.01
第 1 轮迭代:

计算预测值:

计算误差(预测 - 真实):

计算梯度:

更新参数:

第 2 轮迭代:

使用更新后的参数 w=0.35, b=0.12,重复上述步骤,直到参数收敛。

步骤 5:Python 代码示例

下面是使用 Python 实现批量梯度下降的简单代码:

import numpy as np# 输入数据
X = np.array([1, 2, 3, 4])  # 房屋面积
y = np.array([3, 5, 7, 9])  # 房屋价格# 初始化参数
w = 0
b = 0
learning_rate = 0.01
num_iterations = 1000  # 迭代次数# 梯度下降
m = len(X)  # 样本数量
for i in range(num_iterations):y_pred = w * X + b  # 预测值error = y_pred - y  # 误差# 计算梯度dw = (2/m) * np.sum(error * X)db = (2/m) * np.sum(error)# 更新参数w -= learning_rate * dwb -= learning_rate * dbif i % 100 == 0:loss = np.mean(error ** 2)print(f"Iteration {i}: Loss = {loss}, w = {w}, b = {b}")# 结果输出
print(f"Trained parameters: w = {w}, b = {b}")

步骤 6:应用场景

批量梯度下降适合以下情况:

  1. 数据量较小(可以快速计算整个数据集的梯度)
  2. 数据噪声较少(因为每次更新都使用完整数据,减少波动)
  3. 适用于批量处理场景,如:
    • 线性回归(如房价预测、销售预测)
    • 机器学习训练时的批处理系统

总结

  • 批量梯度下降法的特点:

    1. 每次使用 全部数据 来计算损失和梯度。
    2. 收敛速度稳定,但计算量较大,适合小数据集。
    3. 更新参数时是全局最优的方向,但容易卡在局部最优。
  • 示例回顾:
    我们通过房屋面积与价格的线性回归模型,演示了如何使用批量梯度下降一步步优化参数 w 和 b,最终使得预测值与真实值尽可能接近。

希望这个例子能帮助你理解批量梯度下降法的实际应用!

二、随机梯度下降法

用随机梯度下降法(SGD)求解线性回归模型的参数:

假设问题:

我们要拟合一个简单的线性回归模型:

y=wx+b

给定一些样本数据:

xy
13
25
37
49

目标是找到参数 w 和 b,使得均方误差(MSE)最小:

随机梯度下降法的步骤:

实际计算示例:

重复迭代过程:

接下来从数据集中随机抽取样本,比如 (x2=2,y2=5),并重复计算梯度和更新参数,直到收敛(参数变化足够小)。

总结:
  1. 批量梯度下降 一次使用所有数据计算梯度,而
  2. 随机梯度下降(SGD) 每次仅使用一个随机样本来更新参数,因此更新速度快,但震荡较大。
  3. 适用于大规模数据,能够更快接近最优解。

希望这个示例对你有所帮助!

三、再来回顾一下大一高数中导数的求法

求导步骤:

使用 链式法则 进行求导:

最终结果:

机器学习中,梯度和导数是很重要的概念,大家可以回顾一下高等数学中的微分,对于我们学习机器学习有很大的帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于quartz,刷新定时器的cron表达式

文章目录 前言基于quartz,刷新定时器的cron表达式1. 先看一下测试效果2. 实现代码 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&…

LabVIEW智能胎压监测

汽车行车安全是社会关注焦点,轮胎压力异常易引发交通事故,开发胎压监测系统可保障行车安全、降低事故发生率。 系统组成与特点 (一)硬件组成 BMP - 280 气体压力传感器:高精度、稳定性好、能耗低,适合车载…

C语言教程——文件处理(1)

目录 前言 二、什么是文件 2.1文件的概念 2.2程序文件 2.3数据文件 2.4文件名 2.5二进制文件和文本文件 三、文件操作 3.1文件指针 3.2文件的打开与关闭 四、文件的顺序读写 4.1fgetc 4.2fputc 4.3fputs 4.4fgets 总结 前言 我们知道电脑上有许许多多的文件&a…

【橘子ES】Kibana的分析能力Analytics简易分析

一、kibana是啥,能干嘛 我们经常会用es来实现一些关于检索,关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI,你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…

c#的tabControl控件实现自定义标签颜色

最近项目需要自定义tabControl控件颜色,而默认这个控件是不支持自定义标签颜色的,于是想办法实现了这个功能,效果如下图所示: 直接上代码: using System; using System.Collections.Generic; using System.ComponentM…

从零到一:Spring Boot 与 RocketMQ 的完美集成指南

1.Rocket的概念与原理 RocketMQ 是一款由阿里巴巴开源的分布式消息中间件,最初用于支持阿里巴巴的海量业务。它基于发布-订阅模型,具备高吞吐、低延迟、高可用和强一致性的特点,适用于消息队列、大规模数据流处理等场景。以下是对 RocketMQ …

Odoo免费开源ERP最佳业务实践:生产管理

文 / 开源智造(OSCG) Odoo亚太金牌服务 概述 Odoo是全球排名第一的免费开源ERP系统,以其强大的功能和模块化设计著称,适用于各种规模及类型的企业。Odoo集成了生产、采购、销售、库存、财务、人力资源、市场营销、电子商务等多个…

1.CSS的三大特性

css有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级 1.1 层叠性 想通选择器给设置想听的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要是解决样式冲突的问题。 <!DOCTYPE html> <html lang"en&…

【2024年华为OD机试】(A卷,200分)- 优雅子数组 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 如果一个数组中出现次数最多的元素出现大于等于 k 次&#xff0c;被称为 k-优雅数组&#xff0c;k 也可以被称为优雅阈值。 例如&#xff1a; 数组 [1, 2, 3, 1, 2, 3, 1] 是一个 3-优雅数组&#xff0c;因为元素 1 出现次数大于等于 3 次。数组 [1,…

电子应用设计方案102:智能家庭AI鱼缸系统设计

智能家庭 AI 鱼缸系统设计 一、引言 智能家庭 AI 鱼缸系统旨在为鱼类提供一个健康、舒适的生活环境&#xff0c;同时为用户提供便捷的管理和观赏体验。 二、系统概述 1. 系统目标 - 自动维持水质稳定&#xff0c;包括水温、酸碱度、硬度和溶氧量等关键指标。 - 智能投食&…

智能化加速标准和协议的更新并推动验证IP(VIP)在芯片设计中的更广泛应用

作者&#xff1a;Karthik Gopal, SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 随着AI技术向边缘和端侧设备广泛渗透&#xff0c;芯片设计师不仅需要考虑在其设计中引入加速器&#xff0c;也在考虑采用速度更快和带宽更高的总…

Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )

本章主要是关于整体页面布局及样式处理&#xff0c;在进行这一章代码前&#xff0c;先将前两章中的示例代码部分删除&#xff08;如Home.vue、About.vue、counter.ts、App.vue中引用等&#xff09; 1 整体页面布局 页面整体布局构成了产品的框架基础&#xff0c;通常涵盖主导…

Linux 消息队列的使用方法

文章目录 1.概念2. 创建消息队列3. 发送消息4. 接收消息5. 消息结构体6. 消息队列控制&#xff08;删除、获取队列状态&#xff09;消息队列是否存在7. 使用场景8. 注意事项使用例子判断消息队列是否存在的代码获取队列空间大小 1.概念 消息队列是一种进程间通信 (IPC) 机制&a…

低代码可视化-转盘小游戏可视化-代码生成器

转盘小程序是一种互动工具&#xff0c;它通过模拟真实的转盘抽奖或决策体验&#xff0c;为用户提供了一种有趣且公平的选择方式。以下是对转盘小程序的详细介绍&#xff1a; 转盘小程序的应用场景 日常决策&#xff1a;转盘小程序可以帮助用户解决日常生活中的选择困难问题&a…

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

仅仅4M!windows系统适用,免费无限制使用!

软件介绍 在日常生活里&#xff0c;我们经常会碰到电脑运行迟缓、网速卡顿的现象&#xff0c;却又不清楚是哪个程序在占用过多资源。这种时候&#xff0c;一款能实时监测网络和系统状态的工具就变得非常关键了。今天呢&#xff0c;就给大家介绍一个小巧又实用的监控工具——「T…

计算机毕业设计hadoop+spark+hive图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Harmony Next 支持创建分身

应用分身能实现在一个设备上安装多个相同的应用&#xff0c;实现多个账号同时登录使用和运行并且互不影响。主要应用场景有社交账号双开、游戏大小号双开等&#xff0c;无需账号切换&#xff0c;从而省去频繁登录的繁琐。 Harmony Next 很容易就能让 App 支持创建分身。 官方文…

Linux下 date时间应该与系统的 RTC(硬件时钟)同步

发现客户服务器时间与真实时间不同&#xff0c;并且服务器没有网络。 解决办法&#xff1a;时间应该与系统的 RTC&#xff08;硬件时钟&#xff09;同步 手动设置系统时间 使用 date 命令将系统时间设置为 2025年01月21日 14:12:00&#xff1a; sudo date --set"2025-01…

XX污水处理厂基于RK3576核心板应用(四)——人员倒地智能识别系统方案

通过 SAIL-RK3576核心板 支撑的 人员倒地识别系统&#xff0c;污水处理厂能够在广阔、复杂的区域内实时监控人员安全&#xff0c;实现意外倒地等事故的秒级响应与干预。搭配多元人形动态监测机制&#xff0c;还可进一步拓展对其他异常动作或不安全行为的识别&#xff0c;持续保…