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

2024-02-16 01:04

本文主要是介绍批量梯度下降、随机梯度下降、小批量梯度下降,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、批量梯度下降(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.chinasem.cn/article/713060

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

使用Python实现批量分割PDF文件

《使用Python实现批量分割PDF文件》这篇文章主要为大家详细介绍了如何使用Python进行批量分割PDF文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、架构设计二、代码实现三、批量分割PDF文件四、总结本文将介绍如何使用python进js行批量分割PDF文件的方法

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用