批量梯度下降、随机梯度下降、小批量梯度下降

一、批量梯度下降(Batch Gradient Descent,BGD)

  在批量梯度下降中,每次迭代都使用整个训练集的数据进行梯度计算和参数更新。也就是说,每次迭代都对所有的样本求取梯度,然后更新参数。由于要处理整个训练集,批量梯度下降需要较大的内存来存储全部数据,并且计算速度相对较慢。但它的优点是可以保证收敛到全局最优解,尤其在凸优化问题上表现良好。

import numpy as npX = np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
n_iterations = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for iteration in range(n_iterations):gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)eta = learning_rate_schedule(iteration)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

二、 随机梯度下降(Stochastic Gradient Descent,SGD)

  在随机梯度下降中,每次迭代只使用一个样本进行梯度计算和参数更新。因为每次只看一个样本,随机梯度下降的计算速度很快,但对于非凸优化问题或存在噪声较多的数据集,可能会收敛到局部最优解而不是全局最优解。此外,由于随机性的存在,它可以帮助跳出局部最优解。

import numpy as npX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
n_epochs = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for epoch in range(n_epochs):for i in range(m):random_index = np.random.randint(m)xi = X_b[random_index:random_index+1]yi = y[random_index:random_index+1]gradients = 2 * xi.T.dot(xi.dot(theta) - yi)eta = learning_rate_schedule(epoch*m + i)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

三、小批量梯度下降(Mini-batch Gradient Descent,MBGD)

  小批量梯度下降是介于批量梯度下降和随机梯度下降之间的一种方法。它每次迭代使用一个小批量(batch)的样本进行梯度计算和参数更新。这个小批量的大小通常是介于全数据集和单个样本之间的一个中等规模。小批量梯度下降综合了批量梯度下降的稳定性和随机梯度下降的计算效率,通常在实际应用中被广泛采用。

import numpy as npX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
batch_size = 10
n_epochs = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for epoch in range(n_epochs):shuffled_index = np.random.permutation(m)X_b = X_b[shuffled_index]y = y[shuffled_index]for i in range(0, m, batch_size):xi = X_b[i: i+batch_size]yi= y[i: i+batch_size]gradients = 2/batch_size * xi.T.dot(xi.dot(theta) - yi)eta = learning_rate_schedule(epoch*m + i)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

四、sklearn—LinearRegression

import numpy as np
from sklearn.linear_model import LinearRegressionX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)reg = LinearRegression().fit(X, y)print(reg.coef_)
print(reg.intercept_)

1. 三次运行结果 


 

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

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

相关文章

2024年【起重机司机(限门式起重机)】考试及起重机司机(限门式起重机)模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 起重机司机(限门式起重机)考试是安全生产模拟考试一点通总题库中生成的一套起重机司机(限门式起重机)模拟考试题,安全生产模拟考试一点通上起重机司机(限门式起重机)作业手机同步练习。2024年【起重机司机…

BigDecimal的常用API

BigDecimal用于解决浮点型运算时结果出现失真的问题。 这里0.20.1等于0.3就出现了失真 import java.math.BigDecimal; import java.math.RoundingMode;public class Test {public static void main(String[] args) {//BigDeciaml的使用:解决小数运算失真的问题doub…

代码随想录算法训练营29期|day50 任务以及具体任务

第九章 动态规划part07 70. 爬楼梯 (进阶)import java.util.Scanner; class climbStairs{public static void main(String [] args){Scanner sc new Scanner(System.in);int m, n;while (sc.hasNextInt()) {// 从键盘输入参数,中间用空格隔开…

sql语句学习(一)--查询

【有道云笔记】基本sql语句2—查询基础 数据库表结构 DROP TABLE IF EXISTS class; CREATE TABLE class (id int(11) NOT NULL AUTO_INCREMENT,class_num varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 班级号,class_name varchar(255) CHARACTE…

字符输入/输出和输入验证 DAY19

文章目录 前言一、单字符I/O二、缓冲区为什么要引入缓冲区?文件结尾补充**注意几点** 重定向和文件重定向输入cmd是什么?重定向输出组合重定向小试牛刀:文件输出 创建更友好的用户界面使用缓冲输入 如果您发现文章有错误请与我留言&#xff0…

[职场] 优质简历怎么做 #学习方法#笔记

优质简历怎么做 简历是求职的“敲门砖”,直接影响着求职成败。然而,不少求职者对简历不太重视,认为简历就是写自己的经历。因此,在招聘现场,常会看到这样的简历:有的是从某招聘网站直接下载而来&#xff0c…

用163邮箱或者outlook接收国科大邮箱的邮件

使用如图下路径,创建一个新的密码,用于在163大师邮箱或者outlook登录即可 如果不行,则需要手动配置邮箱服务器 参考网址:中国科学院邮件系统帮助中心

AcWing 112. 雷达设备(区间贪心)

[题目概述] 假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d 时,该小岛可以被雷…

ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏)

ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏) 1.1 漏洞和风险分析 ChatGPT还可以帮助开发人员预测代码的潜在风险,识别其中的安全漏洞,而不必先运行它,这可以让开发人员及早发现错误&#xff0…

【VScode配置HTML如何编译 基础 JavaScript 实例】

基础 JavaScript 实例 VScode用JavaScript输出文本用JavaScript改变HTML元素一个外部JavaScript VScode 打开扩展搜索 右键看到即可 用JavaScript输出文本 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body…

计网体系结构

计算机网络的概述 概念 网络&#xff1a;网状类的东西或系统。 计算机网络&#xff1a;是一个将分散的、具有独立性功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…