当前位置: 首页 > news >正文

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

SGD 是梯度下降法的一种变体。与批量梯度下降法不同,SGD 在每次迭代中仅使用一个样本(或一个小批量样本)的梯度来更新参数。它能更快地更新参数,并且可以更容易地跳出局部最优解。

原理

SGD 的基本思想是通过在每次迭代中使用不同的样本,快速更新参数,并逐步逼近目标函数的最小值。

核心公式

在第 ⅰ次迭代中,选择第 ⅰ个样本 ⅹ(ⅰ) 并计算梯度:

其中:

  • θi为第ⅰ次迭代的参数
  • η 为学习率
  • J( θ; x(i), y(i) )为目标函数在第ⅰ个样本 ⅹ(ⅰ)上的梯度

目标是最小化目标函数 J(θ),即:

Python 示例

我们将使用Scikit-Learn中的线性回归模型进行训练,并绘制多个数据分析图形。具体的图形包括:损失函数的收敛图、预测结果与实际结果的比较图、以及参数更新的轨迹图。

数据生成和分割

首先,我们生成一个带有噪声的线性回归数据集,并将其划分为训练集和测试集。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error# 生成回归数据集
X, y = make_regression(n_samples=1000, n_features=1, noise=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 打印前5条数据和对应的目标值
print("前5条训练数据:")
print(X_train[:5])
print("前5个训练目标值:")
print(y_train[:5])
SGD 回归模型初始化

使用 SGDRegressor 初始化随机梯度下降回归模型,设定最大迭代次数为1,禁用容忍度检查,启用 warm_start,每次迭代使用上次的解,设定常数学习率和初始学习率。

# 初始化SGD回归模型
sgd = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True, learning_rate='constant', eta0=0.01, random_state=42)
训练模型

进行多次迭代(epochs),在每个 epoch 进行一次模型训练,记录训练误差和测试误差,以及每次迭代后的系数值。

# 记录训练过程中的信息
n_epochs = 50
train_errors, test_errors = [], []
coef_updates = []# 训练模型
for epoch in range(n_epochs):sgd.fit(X_train, y_train)y_train_predict = sgd.predict(X_train)y_test_predict = sgd.predict(X_test)train_errors.append(mean_squared_error(y_train, y_train_predict))test_errors.append(mean_squared_error(y_test, y_test_predict))coef_updates.append(sgd.coef_.copy())
绘制图形
  1. 损失函数的收敛图:展示训练误差和测试误差随迭代次数的变化。
# 绘制损失函数的收敛图
plt.figure(figsize=(10, 6))
plt.plot(train_errors, label='训练误差')
plt.plot(test_errors, label='测试误差')
plt.xlabel('迭代次数')
plt.ylabel('均方误差')
plt.title('训练和测试误差随迭代次数的变化')
plt.legend()
plt.grid()
plt.show()
  1. 预测结果与实际结果的比较图:展示测试集上的实际值和预测值的散点图。
# 绘制预测结果与实际结果的比较图
plt.figure(figsize=(10, 6))
plt.scatter(X_test, y_test, color='blue', label='实际值')
plt.scatter(X_test, y_test_predict, color='red', label='预测值')
plt.xlabel('输入特征')
plt.ylabel('目标值')
plt.title('实际值与预测值的比较')
plt.legend()
plt.grid()
plt.show()
  1. 参数更新的轨迹图:展示模型系数在每个 epoch 的更新情况。
# 绘制参数更新的轨迹图
coef_updates = np.array(coef_updates)
plt.figure(figsize=(10, 6))
plt.plot(coef_updates, marker='o')
plt.xlabel('迭代次数')
plt.ylabel('系数值')
plt.title('系数更新轨迹')
plt.grid()
plt.show()

案例描述

我们将构建一个案例,使用随机梯度下降(SGD)算法对一个带有噪声的线性回归数据集进行训练和预测。具体步骤如下:

  1. 生成数据:使用 make_regression 生成一个包含 1000 个样本和 1 个特征的回归数据集,并添加噪声。
  2. 数据分割:将数据集划分为训练集和测试集。
  3. 初始化模型:使用 SGDRegressor 初始化随机梯度下降回归模型。
  4. 模型训练:通过多次迭代(epochs),在每个 epoch 中使用训练数据训练模型,并记录训练误差和测试误差,以及每次迭代后的模型系数。
  5. 结果可视化:绘制损失函数的收敛图、预测结果与实际结果的比较图,以及参数更新的轨迹图。
代码实现

以下是实现上述案例的详细代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error# 生成回归数据集
X, y = make_regression(n_samples=1000, n_features=1, noise=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化SGD回归模型
sgd = SGDRegressor(max_iter=1, tol=None, warm_start=True, learning_rate='constant', eta0=0.01, random_state=42)# 记录训练过程中的信息
n_epochs = 50
train_errors, test_errors = [], []
coef_updates = []# 训练模型
for epoch in range(n_epochs):sgd.fit(X_train, y_train)y_train_predict = sgd.predict(X_train)y_test_predict = sgd.predict(X_test)train_errors.append(mean_squared_error(y_train, y_train_predict))test_errors.append(mean_squared_error(y_test, y_test_predict))coef_updates.append(sgd.coef_.copy())# 绘制损失函数的收敛图
plt.figure(figsize=(10, 6))
plt.plot(train_errors, label='Train Error')
plt.plot(test_errors, label='Test Error')
plt.xlabel('Epoch')
plt.ylabel('Mean Squared Error')
plt.title('Training and Test Errors Over Epochs')
plt.legend()
plt.grid()
plt.show()# 绘制预测结果与实际结果的比较图
plt.figure(figsize=(10, 6))
# 使用最后一次迭代的预测结果
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.scatter(X_test, y_test_predict, color='red', label='Predicted')
plt.xlabel('Input Feature')
plt.ylabel('Target')
plt.title('Actual vs Predicted')
plt.legend()
plt.grid()
plt.show()# 绘制参数更新的轨迹图
coef_updates = np.array(coef_updates)
plt.figure(figsize=(10, 6))
plt.plot(coef_updates, marker='o')
plt.xlabel('Epoch')
plt.ylabel('Coefficient Value')
plt.title('Coefficient Updates Over Epochs')
plt.grid()
plt.show()
详细步骤解释
  1. 生成数据
    • 使用 make_regression 生成一个线性回归数据集,包含 1000 个样本,每个样本有 1 个特征,并添加噪声以模拟真实数据中的误差。
    • 使用 train_test_split 将数据集划分为训练集(80%)和测试集(20%)。
  1. 初始化模型
    • 使用 SGDRegressor 初始化随机梯度下降回归模型,设置 max_iter=1warm_start=True 以确保每次迭代都使用上次的解。
    • 设置常数学习率(learning_rate='constant')和初始学习率(eta0=0.01)。
  1. 模型训练
    • 进行 50 次迭代(epochs),在每次迭代中使用训练数据训练模型。
    • 记录每次迭代的训练误差和测试误差,以及模型系数。
  1. 结果可视化
    • 损失函数的收敛图:展示训练误差和测试误差随迭代次数的变化,以评估模型的收敛情况。

    • 预测结果与实际结果的比较图:展示测试集上的实际值和预测值的散点图,以评估模型的预测效果。

    • 参数更新的轨迹图:展示模型系数在每个 epoch 的更新情况,以了解参数的收敛过程。

通过以上步骤,我们可以全面了解随机梯度下降算法在回归问题中的应用,以及模型训练过程中的各项指标变化情况。

结论

在这个案例中,我们生成了一个带有噪声的线性回归数据集,并使用随机梯度下降(SGD)进行模型训练。通过分析损失函数的收敛图、预测结果与实际结果的比较图,以及参数更新的轨迹图,我们可以清楚地了解模型的训练过程和效果。SGD 由于在每次迭代中使用了不同的样本,使得参数更新更加频繁,有助于更快地逼近目标函数的最小值。

案例:用随机梯度下降法预测员工工资

案例描述

假设你是一位外企人力资源分析师,希望根据员工的工作经验(年)和学历水平(学位)来预测他们的工资。你可以使用随机梯度下降法(SGD)来进行线性回归分析,以构建一个工资预测模型。

场景细节
  • 目标:根据员工的工作经验和学历水平预测工资。
  • 数据集:我们将生成一个模拟的数据集,包括1000个样本,每个样本包含工作经验(年)、学历水平(学位,使用1-3表示高中、学士、硕士)和工资(美元)。数据集带有一定的噪声,以模拟真实数据中的误差。
  • 步骤
    1. 生成数据集。
    2. 划分数据集为训练集和测试集。
    3. 初始化随机梯度下降法回归模型。
    4. 训练模型并记录训练误差和测试误差。
    5. 可视化结果,包括损失函数的收敛图、预测结果与实际结果的比较图、以及参数更新的轨迹图。
代码实现
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler# 设置默认字体
rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 生成模拟员工工资数据
np.random.seed(42)
n_samples = 1000
X_experience = np.random.rand(n_samples, 1) * 40  # 工作经验在0到40年之间
X_education = np.random.randint(1, 4, size=(n_samples, 1))  # 学历水平:1-高中,2-学士,3-硕士
X = np.hstack([X_experience, X_education])
y = 20000 + 3000 * X_experience + 10000 * X_education + np.random.randn(n_samples, 1) * 5000  # 工资公式,带有噪声# 检查生成的数据
print("前5条数据和对应的目标值:")
print(X[:5])
print(y[:5])# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化数据
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 初始化SGD回归模型
sgd = SGDRegressor(max_iter=1, tol=None, warm_start=True, learning_rate='constant', eta0=0.01, random_state=42)# 记录训练过程中的信息
n_epochs = 50
train_errors, test_errors = [], []
coef_updates = []# 训练模型
for epoch in range(n_epochs):sgd.fit(X_train_scaled, y_train.ravel())y_train_predict = sgd.predict(X_train_scaled)y_test_predict = sgd.predict(X_test_scaled)train_errors.append(mean_squared_error(y_train, y_train_predict))test_errors.append(mean_squared_error(y_test, y_test_predict))coef_updates.append(sgd.coef_.copy())# 检查预测值范围
print("预测值的最大值:", np.max(y_test_predict))
print("预测值的最小值:", np.min(y_test_predict))# 绘制损失函数的收敛图
plt.figure(figsize=(12, 8))
plt.plot(train_errors, label='训练误差')
plt.plot(test_errors, label='测试误差')
plt.xlabel('迭代次数')
plt.ylabel('均方误差')
plt.title('训练和测试误差随迭代次数的变化')
plt.legend()
plt.grid()
plt.show()# 绘制预测结果与实际结果的比较图
plt.figure(figsize=(12, 8))
plt.scatter(X_test[:, 0], y_test, color='blue', label='实际值')
plt.scatter(X_test[:, 0], y_test_predict, color='red', label='预测值')
plt.xlabel('工作经验(年)')
plt.ylabel('工资(美元)')
plt.title('实际值与预测值的比较')
plt.legend()
plt.grid()
plt.show()# 绘制参数更新的轨迹图
coef_updates = np.array(coef_updates)
plt.figure(figsize=(12, 8))
for i in range(coef_updates.shape[1]):plt.plot(coef_updates[:, i], marker='o', label=f'系数 {i}')
plt.xlabel('迭代次数')
plt.ylabel('系数值')
plt.title('系数更新轨迹')
plt.legend()
plt.grid()
plt.show()

加入了标准化步骤,并包含所有检查点以确保数据的范围和模型的训练效果正确。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler# 设置默认字体
rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 生成模拟员工工资数据
np.random.seed(42)
n_samples = 1000
X_experience = np.random.rand(n_samples, 1) * 40  # 工作经验在0到40年之间
X_education = np.random.randint(1, 4, size=(n_samples, 1))  # 学历水平:1-高中,2-学士,3-硕士
X = np.hstack([X_experience, X_education])
y = 20000 + 3000 * X_experience + 10000 * X_education + np.random.randn(n_samples, 1) * 5000  # 工资公式,带有噪声# 检查生成的数据
print("前5条数据和对应的目标值:")
print(X[:5])
print(y[:5])# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化数据
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 初始化SGD回归模型
sgd = SGDRegressor(max_iter=1, tol=None, warm_start=True, learning_rate='constant', eta0=0.01, random_state=42)# 记录训练过程中的信息
n_epochs = 50
train_errors, test_errors = [], []
coef_updates = []# 训练模型
for epoch in range(n_epochs):sgd.fit(X_train_scaled, y_train.ravel())y_train_predict = sgd.predict(X_train_scaled)y_test_predict = sgd.predict(X_test_scaled)train_errors.append(mean_squared_error(y_train, y_train_predict))test_errors.append(mean_squared_error(y_test, y_test_predict))coef_updates.append(sgd.coef_.copy())# 检查预测值范围
print("预测值的最大值:", np.max(y_test_predict))
print("预测值的最小值:", np.min(y_test_predict))# 绘制损失函数的收敛图
plt.figure(figsize=(12, 8))
plt.plot(train_errors, label='训练误差')
plt.plot(test_errors, label='测试误差')
plt.xlabel('迭代次数')
plt.ylabel('均方误差')
plt.title('训练和测试误差随迭代次数的变化')
plt.legend()
plt.grid()
plt.show()# 绘制预测结果与实际结果的比较图
plt.figure(figsize=(12, 8))
plt.scatter(X_test[:, 0], y_test, color='blue', label='实际值')
plt.scatter(X_test[:, 0], y_test_predict, color='red', label='预测值')
plt.xlabel('工作经验(年)')
plt.ylabel('工资(美元)')
plt.title('实际值与预测值的比较')
plt.legend()
plt.grid()
plt.show()# 绘制参数更新的轨迹图
coef_updates = np.array(coef_updates)
plt.figure(figsize=(12, 8))
for i in range(coef_updates.shape[1]):plt.plot(coef_updates[:, i], marker='o', label=f'系数 {i}')
plt.xlabel('迭代次数')
plt.ylabel('系数值')
plt.title('系数更新轨迹')
plt.legend()
plt.grid()
plt.show()

这个代码片段包括了数据生成、标准化、模型训练和可视化步骤。通过标准化数据,我们可以帮助模型更好地收敛,并避免由于数据范围问题导致的异常结果。

详细步骤解释
  1. 生成数据
    • 使用 numpy 生成一个包含工作经验(0-40年)和学历水平(高中、学士、硕士)的模拟数据集。
    • 使用工资公式生成目标值,公式中包括常数项、工作经验和学历水平的系数,以及一定的随机噪声。
  1. 划分数据集
    • 使用 train_test_split 将数据集划分为训练集(80%)和测试集(20%)。
  1. 初始化模型
    • 使用 SGDRegressor 初始化随机梯度下降回归模型,设置 max_iter=1warm_start=True 以确保每次迭代都使用上次的解。
    • 设置常数学习率(learning_rate='constant')和初始学习率(eta0=0.01)。
  1. 模型训练
    • 进行 50 次迭代(epochs),在每次迭代中使用训练数据训练模型。
    • 记录每次迭代的训练误差和测试误差,以及模型系数。
  1. 结果可视化
    • 损失函数的收敛图:展示训练误差和测试误差随迭代次数的变化。

标准化:

    • 预测结果与实际结果的比较图:展示测试集上的实际值和预测值的散点图。

标准化:

    • 参数更新的轨迹图:展示模型系数在每个 epoch 的更新情况。

标准化:

结论

通过以上步骤,我们构建了一个随机梯度下降法的回归模型,用于预测员工的工资。通过分析损失函数的收敛图、预测结果与实际结果的比较图,以及参数更新的轨迹图,我们可以清楚地了解模型的训练过程和效果。随机梯度下降法能够更快地更新参数,并且可以更容易地跳出局部最优解,从而更快地逼近目标函数的最小值。

相关文章:

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

SGD 是梯度下降法的一种变体。与批量梯度下降法不同,SGD 在每次迭代中仅使用一个样本(或一个小批量样本)的梯度来更新参数。它能更快地更新参数,并且可以更容易地跳出局部最优解。 原理 SGD 的基本思想是通过在每次迭代中使用不…...

TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入

经过数月的开发和完善,TDengine 3.3.2.0 版本终于问世了。这一版本中既有针对开源社区的功能优化,也有从企业级用户需求出发做出的功能调整。在开源版本中,我们增强了系统的灵活性和兼容性;而在企业级版本中,新增了关键…...

Ubuntu 24.04 LTS 无法打开Chrome浏览器

解决办法: 删除本地配置文件,再次点击Chrome图标,即可打开。 rm ~/.config/google-chrome/ -rf ref: Google chrome not opening in Ubuntu 22.04 LTS - Ask Ubuntu...

linux中RocketMQ安装(单机版)及springboot中的使用

文章目录 一、安装1.1、下载RocketMQ1.2、将下载包上传到linux中,然后解压1.3、修改runserver.sh的jvm参数大小(根据自己服务器配置来修改)1.4、启动mqnamesrv (类似于注册中心)1.5、修改runbroker.sh的jvm参数大小&am…...

亚信安全终端一体化解决方案入选应用创新典型案例

近日,由工业和信息化部信息中心主办的2024信息技术应用创新发展大会暨解决方案应用推广大会成功落幕,会上集中发布了一系列技术水平先进、应用效果突出、产业带动性强的信息技术创新工作成果。其中,亚信安全“终端一体化安全运营解决方案”在…...

Django视图与URLs路由详解

在Django Web框架中,视图(Views)和URLs路由(URL routing)是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数,并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统&am…...

怎么关闭 Windows 安全中心,手动关闭 Windows Defender 教程

Windows 安全中心(也称为 Windows Defender Security Center)是微软 Windows 操作系统内置的安全管理工具,用于监控和控制病毒防护、防火墙、应用和浏览器保护等安全功能。然而,在某些情况下,用户可能需要关闭 Windows…...

洛谷看不了别人主页怎么办

首先,我们先点进去 可以看到,看不了一点 那我们看向上方,就可以发现,我们那有个URL,选中 把光标插到n和/中间 把.cn删了,变成国际服 我们就可以看了 但是国际服还没搭建完,跳转的时候可能503&a…...

邮件安全篇:企业电子邮件安全涉及哪些方面?

1. 邮件安全概述 企业邮件安全涉及多个方面,旨在保护电子邮件通信的机密性、完整性和可用性,防止数据泄露、欺诈、滥用及其他安全威胁。本文从身份验证与防伪、数据加密、反垃圾邮件和反恶意软件防护、邮件内容过滤与审计、访问控制与权限管理、邮件存储…...

软件测试09 自动化测试技术(Selenium)

重点/难点 重点:理解自动化测试的原理及其流程难点:Selinum自动化测试工具的使用 目录 系统测试 什么是系统测试什么是功能测试什么是性能测试常见的性能指标有哪些 自动化测试概述 测试面临的问题 测试用例数量增多,工作量增大&#xff…...

记录解决springboot项目上传图片到本地,在html里不能回显的问题

项目场景: 项目场景:在我的博客系统里:有个相册模块:需要把图片上传到项目里,在html页面上显示 解决方案 1.建一个文件夹 例如在windows系统下。可以在项目根目录下建个photos文件夹,把上传的图片文件…...

C++ 中 const 关键字

C 中 const 关键字 2009-02-19 2024-07-23 补充C11后的做法 在 C 中,const 是一个关键字(也称为保留字),它用于指定变量或对象的值在初始化后不能被修改。关键字是编程语言中具有特殊含义的词汇,编译器会识别这些词并…...

客梯自动监测识别摄像机

当今社会,随着城市建设的快速发展,客梯作为现代化建筑不可或缺的一部分,其安全性与效率显得尤为重要。为了提升客梯的安全管理水平,智能监测技术应运而生,尤其是客梯自动监测识别摄像机系统的应用,为乘客和…...

为什么那么多人学习AI绘画?工资香啊!

在当今这个科技日新月异的时代,AI绘画作为数字艺术与人工智能融合的璀璨成果,正吸引着无数人投身其中,而“工资香啊!”无疑是这一热潮背后不可忽视的驱动力之一。 AI绘画的高薪待遇是吸引众多学习者的关键因素。随着市场对AI艺术…...

国产JS库(js-tool-big-box)7月度总结

js-tool-big-box开发已经有3个月了,团队内的小伙伴进行了热烈的讨论,持续做了功能迭代。小伙伴们也做了艰苦卓绝的文档分享,有纯功能分享类的,有带有小故事的,有朋友们利用自己独自网站分发分享的。7月份快要结束了&am…...

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度,不过这次是高精度加法!话不多说,开整! 声明 与之前那篇文章一样,如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位,所以我们的结果ans[]的长度定义为两个加数中最…...

python键盘操作工具:ctypes、pyautogui

这里模拟 Win Ctrl L 组合键 1、ctypes ctypes库,它允许我们直接调用Windows API来模拟键盘输入。 import ctypes import time# 定义所需的常量和结构 LONG ctypes.c_long DWORD ctypes.c_ulong ULONG_PTR ctypes.POINTER(DWORD) WORD ctypes.c_ushortclass…...

计算机网络发展历史

定义和基本概念 计算机网络是由多个计算设备通过通信线路连接起来的集合,这些设备能够互相交换数据、消息和资源。计算机网络的核心功能是实现数据的远程传输和资源共享,它使得地理位置的限制被大大减弱,极大地促进了信息的自由流动和人类社…...

记录安装android studio踩的坑 win7系统

最近在一台新电脑上安装android studio,报了很多错误,也是费了大劲才解决,发出来大家一起避免一些问题,找到解决方法。 安装时一定要先安装jdk,cmd命令行用java -version查当前的版本,没有的话,先安装jdk,g…...

Python图形编程-PyGame快速入门

PyGame快速入门 文章目录 PyGame快速入门1、什么是PyGame2、安装PyGame3、创建PyGame窗口4、处理事件5、绘制对象6、移动对象7、加载和显示图像8、播放声音9、处理用户输入10、碰撞检测11、动画精灵12、管理游戏状态13、Pygame 中的典型主游戏循环1、什么是PyGame Pygame 是一…...

邦芒宝典:8种方法调整职场心态

在职场中拼斗当然要有好的心态,您知道职场心态如何调整吗? ​ ​方法1:自我调整 ​“思想可以使天堂变成地狱,也可以使地狱变成天堂。”你不能样样顺利,但可以事事尽心;你不能左右天气,但可以改变心情;你…...

华为OD2024D卷机试题汇总,含D量50%+,按算法分类刷题,事半功倍

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…...

Unity UGUI 之 Graphic Raycaster

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 首先手册连接如下: Unity - Manual: Graphic Raycaster 笔记来源于&#xff…...

类和对象——相关的零碎知识

前提提示: 其实C中的类和对象,最重要的是6个默认函数,如有忘记,请移步到:类和对象。本章是对于一些细节知识的补充和拓展。 1. 隐示类型转换 在运算时,运算符左右两边的操作数的类型不同,编译器…...

【hadoop大数据集群 1】

hadoop大数据集群 1 文章目录 hadoop大数据集群 1一、环境配置1.安装虚拟机2.换源3.安装工具4.安装JDK5.安装Hadoop 一、环境配置 折腾了一下午/(ㄒoㄒ)/~~ 1.安装虚拟机 参考视频:https://www.bilibili.com/video/BV18y4y1G7JA?p17&vd_sourcee15e83ac6b22a…...

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试,从下载项目的源代码开始,通过编译过程,最终将项目部署到目标板卡上运行演示。此外,我们还介绍如何修改板卡的IP地址,以便更好地适应您的网络环境或项目需求。 首先从Gi…...

array.some() ==> 查找数组list中,是否有包含与当前currKey的值不一样的misId

需求: const list [ {misId: e, name: 小白}, {misId: e, name: 小白白}, {misId: r, name: 小王}, {misId: r, name: 小小王} ] let currKey r 查找数组list中,是否有包含与当前currKey的值不一样的misId 解决: 要查找数组lis…...

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大?是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了,它们可以帮你轻松打造自己的图床,让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧! Typora …...

【黄啊码】GPT的相关名词解释

GPT是一种基于互联网的、可用数据来训练的、文本生成的深度学习模型 GPT的核心技术是‌变换器(Transformer),这是一种神经网络结构,可以有效地处理序列数据,比如文本、语音、图像等。GPT使用了大量的预训练数据&#…...

git stash 命令详解

git stash 描述 git stash 命令用于将当前工作目录中的未提交更改(包括暂存区和工作区的更改)保存到一个栈中,并恢复工作目录到干净的 HEAD 状态。这样您可以在不提交当前更改的情况下,切换到其他分支或进行其他操作。后续可以通…...

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式,大概需要像这种: 每行是一个单词,格式为:英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …...

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

目录 0 专栏介绍1 数值优化:共轭梯度法2 基于共轭梯度法的轨迹优化2.1 障碍约束函数2.2 曲率约束函数2.3 平滑约束函数 3 算法仿真3.1 ROS C实现3.2 Python实现 0 专栏介绍 🔥课程设计、毕业设计、创新竞赛、学术研究必备!本专栏涉及更高阶的…...

深入浅出WebRTC—ALR

ALR(Application Limited Region)指的是网络传输过程中,由于应用层的限制(而非网络拥塞)导致带宽未被充分利用的情况。在这种情况下,应用层可能因为处理能力、手动配置或其他因素无法充分利用可用带宽&…...

BSV区块链技术现实应用原理解析

BSV区块链以其卓越的可扩展性、坚如磐石的安全性、极低的交易成本等特性,成为满足企业当下需求并为企业未来成功奠基铺路的理想技术。 BSV协会近期发布了一个题为《驾驭数字化转型:在自动化世界中建立信任——区块链在数据保护和交易优化中的角色》的报…...

七大基于比较的排序算法

目录 一、基于比较的排序算法概述 1. 插入排序(Insertion Sort) 2. 选择排序(Selection Sort) 3. 冒泡排序(Bubble Sort) 4. 归并排序(Merge Sort) 5. 快速排序(Qu…...

web前端 React 框架面试200题(四)

面试题 97. React 两种路由模式的区别?hash和history? 参考回答: 1: hash路由 hash模式是通过改变锚点(#)来更新页面URL,并不会触发页面重新加载,我们可以通过window.onhashchange监听到hash的改变,从而处…...

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…...

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中,可能会遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。 PS:由于useState是一个普通的函数, 定义为() > void;因此此处不能用await/async替代setTimeout,只能用在返…...

京准:GPS北斗卫星授时信号安全隔离防护装置

京准:GPS北斗卫星授时信号安全隔离防护装置 京准:GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能: GPS/BDS单系统信号拒止情况下(包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…...

解决方案架构师系列 - AWS - Pinpoint

AWS Pinpoint介绍 Amazon Pinpoint 为营销人员和开发人员提供了一款可自定义的工具,助力他们大规模地开展跨渠道、行业和活动的客户通信。 Amazon Pinpoint是一个全面的客户参与平台,‌旨在帮助营销人员和开发人员大规模地开展跨渠道、‌行业和活动的客…...

MF173:将多个工作表转换成PDF文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一,Docker(公司)在生态系统中创建了一些很棒的工具,但不是全部。 容器方面有…...

PRISM-Python 中的规则一个简单的 Python 规则感应系统

欢迎来到雲闪世界.PRISM 是一种现有算法(尽管我确实创建了一个 Python 实现),PRISM 相对简单,但在机器学习中,有时最复杂的解决方案效果最好,有时最简单的解决方案效果最好。然而,当我们希望建立…...

DB-GPT:LLM应用的集大成者

整体架构 架构解读 可以看到,DB-GPT把架构抽象为7层,自下而上分别为: 运行环境:支持本地/云端&单机/分布式等部署方式。顺便一提,RAY是蚂蚁深度参与的一个开源项目,所以对RAY功能的支持应该非常完善。…...

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…...

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度(通常是 float32&#xff0…...

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…...

【目标检测】Anaconda+PyTorch(GPU)+PyCharm(Yolo5)配置

前言 本文主要介绍在windows系统上的Anaconda、PyTorch、PyCharm、Yolov5关键步骤安装,为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程,为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网:https://www.anaconda…...

Django实战项目之进销存数据分析报表——第二天:项目创建和 PyCharm 配置

在上一篇博客中,我们讨论了如何搭建一个全栈 Web 应用的开发环境,包括 Python 环境的创建、Django 和 MySQL 的安装以及前端技术栈的选择。现在,让我们继续深入,学习如何在 PyCharm 中创建一个新的 Django 项目并进行配置。 一…...

静态路由实验

1.实验拓扑图 二、实验要求 1.R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址,之后不能再对其进行任何配置; 2.R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3.R1、R2、R4&…...