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

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实现批量分割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 示例调用

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

Java实现批量化操作Excel文件的示例代码

《Java实现批量化操作Excel文件的示例代码》在操作Excel的场景中,通常会有一些针对Excel的批量操作,这篇文章主要为大家详细介绍了如何使用GcExcel实现批量化操作Excel,感兴趣的可... 目录前言 | 问题背景什么是GcExcel场景1 批量导入Excel文件,并读取特定区域的数据场景2

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

Python脚本:对文件进行批量重命名

字符替换:批量对文件名中指定字符进行替换添加前缀:批量向原文件名添加前缀添加后缀:批量向原文件名添加后缀 import osdef Rename_CharReplace():#对文件名中某字符进行替换(已完结)re_dir = os.getcwd()re_list = os.listdir(re_dir)original_char = input('请输入你要替换的字符:')replace_ch