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

机器学习(13)——LGBM(2)

一、LightGBM算法简介

(一)背景

  1. 机器学习中的树模型
    • 在机器学习领域,基于树的模型(如决策树、随机森林、梯度提升树等)是非常重要的算法类别。它们具有很强的可解释性,能够很好地处理非线性关系,并且对数据的分布假设相对较少。然而,传统的基于树的模型在面对大规模数据时,往往存在训练速度慢、内存占用高等问题。
  2. LightGBM的诞生
    • LightGBM是由微软公司开发的一种基于梯度提升框架的机器学习算法。它是为了克服传统梯度提升树(GBDT)在处理大规模数据时的性能瓶颈而设计的。LightGBM在保持梯度提升树高精度的同时,大大提高了训练效率,降低了内存消耗。

(二)算法特点

  1. 高效性
    • 基于直方图的算法优化:LightGBM采用基于直方图的算法来加速训练过程。它将连续的特征值离散化为k个整数,形成一个直方图。在寻找最佳分裂点时,算法只需要遍历直方图的k个桶,而不是遍历所有的数据点。这样大大减少了计算量。例如,对于一个有10000个样本的特征列,如果将其离散化为256个桶,那么在计算分裂增益时,只需要考虑256个可能的分裂点,而不是10000个样本点。
    • 深度优化的梯度提升框架:LightGBM在梯度提升框架的基础上进行了深度优化。它采用了多线程并行化处理,可以充分利用多核CPU的计算能力。同时,它还支持GPU加速,进一步提升了训练速度。在处理大规模数据集时,LightGBM的训练速度比传统的GBDT快几十倍甚至上百倍。
  2. 低内存使用
    • 由于采用了基于直方图的算法,LightGBM在内存使用上也进行了优化。它只需要存储直方图的信息,而不需要存储原始数据的全部细节。例如,对于一个大规模的稀疏数据集,传统的树模型可能会因为存储大量的零值而占用大量内存,而LightGBM通过直方图的方式可以有效地减少内存占用。
  3. 高精度
    • LightGBM继承了梯度提升树的高精度特性。它通过逐层构建决策树的方式,每次都在前一轮的基础上进行优化,能够很好地拟合数据。并且,它还提供了多种参数来控制模型的复杂度,如树的深度、叶子节点数量等,从而在精度和泛化能力之间取得平衡。
  4. 支持多种功能
    • 支持分类和回归任务:LightGBM可以用于二分类、多分类和回归等多种任务。对于不同的任务,它提供了相应的损失函数,如二分类任务的二元交叉熵损失函数、多分类任务的多类交叉熵损失函数和回归任务的均方误差损失函数等。
    • 支持特征重要性评估:和许多基于树的模型一样,LightGBM可以评估特征的重要性。它通过计算特征在构建树的过程中对目标变量的贡献来确定特征的重要性。这有助于我们理解哪些特征对模型的预测结果影响较大,从而可以进行特征选择和特征工程。
    • 支持早停机制:在训练过程中,LightGBM可以设置早停机制。当模型在验证集上的性能在连续几轮迭代中没有提升时,训练过程会提前停止。这样可以避免模型过拟合,同时节省训练时间。

二、LightGBM算法原理

(一)基于梯度提升的框架

  1. 梯度提升的基本思想
    • 梯度提升是一种集成学习方法,它通过逐步构建多个弱学习器(通常是决策树)来逼近目标函数。首先,初始化一个简单的模型(如常数模型),然后在每一轮迭代中,计算当前模型的残差(目标值与模型预测值之间的差异)。接着,构建一个新的弱学习器来拟合这些残差,将这个新的弱学习器加入到模型中,并更新模型的预测值。这个过程不断重复,直到达到预定的迭代次数或者模型的性能不再提升。
  2. LightGBM的梯度提升过程
    • 在LightGBM中,每一轮迭代的目标是找到一个最优的决策树,使得模型的整体损失函数最小化。它通过计算每个样本的梯度(损失函数对预测值的导数)和二阶导数(损失函数对预测值的二阶导数)来构建决策树。对于一个给定的样本,梯度表示当前预测值与真实值之间的差距方向,二阶导数表示这种差距的曲率。在构建树的过程中,LightGBM会利用这些梯度和二阶导数信息来计算分裂增益,从而选择最优的分裂点。

(二)基于直方图的决策树构建

  1. 直方图的构建
    • 对于每个特征,LightGBM首先将其值离散化为k个整数(桶)。这个过程可以通过等频划分(将数据分成频率大致相等的桶)或者等距划分(将数据分成间隔相等的桶)等方式来实现。然后,对于每个桶,计算该桶内所有样本的梯度和二阶导数的总和。这样就形成了一个直方图,直方图的每个桶包含了对应特征值范围内的样本的梯度和二阶导数信息。
  2. 分裂点的选择
    • 在构建决策树时,需要选择最优的分裂点来最大化分裂增益。分裂增益是衡量分裂前后模型性能提升的一个指标。在LightGBM中,分裂增益的计算公式如下:
      G a i n = 1 2 ( ( ∑ i ∈ L g i ) 2 ∑ i ∈ L h i + λ + ( ∑ i ∈ R g i ) 2 ∑ i ∈ R h i + λ − ( ∑ i ∈ P g i ) 2 ∑ i ∈ P h i + λ ) − γ Gain = \frac{1}{2} \left( \frac{(\sum_{i \in L} g_i)^2}{\sum_{i \in L} h_i + \lambda} + \frac{(\sum_{i \in R} g_i)^2}{\sum_{i \in R} h_i + \lambda} - \frac{(\sum_{i \in P} g_i)^2}{\sum_{i \in P} h_i + \lambda} \right) - \gamma Gain=21(iLhi+λ(iLgi)2+iRhi+λ(iRgi)2iPhi+λ(iPgi)2)γ
      其中, L L L R R R P P P分别表示分裂后左子树、右子树和分裂前父节点的样本集合, g i g_i gi h i h_i hi分别是样本(i)的梯度和二阶导数, λ \lambda λ γ \gamma γ是正则化参数。通过遍历直方图的每个桶,计算每个可能的分裂点的分裂增益,选择分裂增益最大的点作为最优分裂点。

(三)梯度提升树的组合

  1. 模型更新
    • 在每一轮迭代中,构建了一个最优的决策树后,需要将这个树加入到模型中,并更新模型的预测值。对于每个样本,模型的预测值是所有已构建的决策树的预测值之和。具体来说,如果第(t)轮迭代构建的决策树为(T_t(x)),模型的预测值更新公式为:
      F t ( x ) = F t − 1 ( x ) + ν T t ( x ) F_t(x) = F_{t - 1}(x) + \nu T_t(x) Ft(x)=Ft1(x)+νTt(x)
      其中, F t − 1 ( x ) F_{t - 1}(x) Ft1(x)是上一轮迭代的模型预测值,(\nu)是学习率,用于控制每棵树对模型更新的贡献程度。
  2. 损失函数的优化
    • LightGBM的目标是通过不断更新模型,使得模型的损失函数最小化。对于不同的任务,损失函数的形式不同。例如,在二分类任务中,常用的损失函数是二元交叉熵损失函数:
      L ( y , F ( x ) ) = − 1 N ∑ i = 1 N [ y i log ⁡ ( p i ) + ( 1 − y i ) log ⁡ ( 1 − p i ) ] L(y, F(x)) = -\frac{1}{N} \sum_{i = 1}^{N} [y_i \log(p_i) + (1 - y_i) \log(1 - p_i)] L(y,F(x))=N1i=1N[yilog(pi)+(1yi)log(1pi)]
      其中,(y_i)是样本的真实标签,(p_i)是模型预测的正类概率,(N)是样本数量。在每一轮迭代中,通过构建决策树来拟合损失函数的负梯度,从而逐步优化模型的预测性能。

三、LightGBM的参数设置

(一)核心参数

  1. 学习率(learning_rate)
    • 学习率控制每棵树对模型更新的贡献程度。学习率越小,模型更新越缓慢,需要更多的迭代次数来达到相同的性能。一般来说,学习率的取值范围在0.01 - 0.3之间。较小的学习率可以使模型更稳定,但可能会导致训练时间增加。
  2. 树的深度(max_depth)
    • 树的深度决定了决策树的最大层数。较大的树深度可以使模型更复杂,能够更好地拟合数据,但同时也增加了过拟合的风险。通常,树的深度可以设置为3 - 10,具体值需要根据数据集的复杂度进行调整。
  3. 叶子节点数量(num_leaves)
    • 叶子节点数量是决策树中叶子节点的总数。它是一个重要的参数,因为LightGBM是基于叶子生长的算法。较大的叶子节点数量可以使模型更复杂,但也会增加模型的计算量和内存占用。一般来说,叶子节点数量可以设置为20 - 100。
  4. 迭代次数(num_boost_round)
    • 迭代次数表示构建决策树的轮数。较多的迭代次数可以使模型更精确,但可能会导致过拟合。通常,可以通过交叉验证或者早停机制来确定合适的迭代次数。

(二)正则化参数

  1. lambda(reg_lambda)
    • lambda是L2正则化参数,用于控制模型的复杂度。较大的lambda值会使模型更加平滑,减少过拟合的风险。一般取值范围在0 - 1之间。
  2. gamma(min_data_in_leaf)
    • gamma是用于控制分裂增益的阈值。只有当分裂增益大于gamma时,才会进行分裂。较大的gamma值会限制树的生长,减少模型的复杂度。通常,gamma的取值范围在0 - 1之间。

(三)其他重要参数

  1. 特征分数(feature_fraction)
    • 特征分数用于控制在每次迭代中使用的特征比例。通过随机选择一部分特征来构建决策树,可以减少模型的方差,提高模型的泛化能力。一般取值范围在0.5 - 1之间。
  2. 数据子采样(bagging_fraction)
    • 数据子采样用于控制在每次迭代中使用的数据比例。通过随机采样一部分数据来构建决策树,可以减少模型的方差。一般取值范围在0.5 - 1之间。
  3. 早停轮数(early_stopping_rounds)
    • 早停轮数用于设置在验证集上模型性能没有提升的轮数阈值。当模型在连续几轮迭代中性能没有提升时,训练过程会提前停止,从而避免过拟合。

四、LightGBM的应用场景

(一)大规模数据处理

  1. 电商领域
    • 在电商平台中,有大量的用户行为数据,如用户浏览商品、购买商品等行为记录。这些数据通常具有高维度和大规模的特点。LightGBM可以高效地处理这些数据,用于构建用户购买行为预测模型。例如,预测用户是否会购买某个商品,通过分析用户的浏览历史、搜索关键词、停留时间等特征,利用LightGBM模型可以快速训练出高精度的预测模型,为电商平台的精准营销提供支持。
  2. 金融风险评估
    • 金融机构需要处理大量的客户数据,如客户的信用记录、交易流水等,以评估客户的信用风险。这些数据量大且复杂,传统的模型可能难以在有限的时间内完成训练。LightGBM能够快速处理这些数据,构建信用风险评估模型。它可以分析客户的还款记录、收入情况、负债情况等多个特征,准确地预测客户违约的可能性,帮助金融机构更好地管理风险。

(二)特征重要性分析

  1. 医疗数据分析
    • 在医疗领域,通过对患者的病历数据、检查结果等进行分析,可以找出影响疾病诊断和治疗效果的关键因素。LightGBM可以评估各个特征的重要性,例如在分析某种疾病的发病因素时,它可以确定患者的年龄、家族病史、生活习惯等特征对疾病发病的影响程度。这有助于医生更好地理解疾病的发病机制,为疾病的预防和治疗提供依据。
  2. 工业生产优化
    • 在工业生产中,有许多因素会影响产品的质量和生产效率,如设备参数、原材料质量、生产工艺等。利用LightGBM对生产数据进行分析,可以确定哪些因素对产品质量和生产效率的影响较大。例如,在钢铁生产过程中,通过分析温度、压力、原料成分等特征的重要性,可以优化生产参数,提高产品质量和生产效率。

五、LightGBM的优缺点总结

(一)优点

  1. 训练速度快
    • LightGBM通过基于直方图的算法优化和多线程并行化处理,在大规模数据集上能够快速完成训练。这使得它在实际应用中可以节省大量的时间和计算资源。
  2. 内存占用低
    • 它采用直方图的方式存储数据信息,减少了对原始数据的存储需求。对于大规模的稀疏数据集,这种内存优化的优势更加明显。
  3. 高精度
    • 继承了梯度提升树的高精度特性,并且通过多种参数控制模型复杂度,能够在精度和泛化能力之间取得良好的平衡。
  4. 功能丰富
    • 支持分类、回归等多种任务,可以评估特征重要性,还具备早停机制等,能够满足多种机器学习任务的需求。

(二)缺点

  1. 模型复杂度高
    • 虽然LightGBM在训练过程中进行了优化,但它的模型结构相对复杂。对于一些简单的任务,可能会出现“大炮打蚊子”的情况,即模型过于复杂而造成不必要的计算开销。
  2. 调参难度较大
    • LightGBM有众多的参数,包括学习率、树的深度、叶子节点数量、正则化参数等。这些参数之间的相互作用较为复杂,需要根据具体的数据集和任务进行细致的调整,调参过程可能会比较耗时。

相关文章:

机器学习(13)——LGBM(2)

一、LightGBM算法简介 (一)背景 机器学习中的树模型 在机器学习领域,基于树的模型(如决策树、随机森林、梯度提升树等)是非常重要的算法类别。它们具有很强的可解释性,能够很好地处理非线性关系&#xff…...

翻到了一段2005年写的关于需求的文字

那时的俺还很稚嫩,很多东西都不懂。 另外 hfghfghfg其实是俺的一个马甲,早年间在delphibbs时用的。 来自:hfghfghfg, 时间:2005-01-20 13:16, ID:2971188我到客户那里的情况 一边要和他聊天 一边改报表。 一张报表 …...

MCP - Cline 接入 高德地图 Server

文章目录 一、准备1、注册、认证高德开放平台账号2、创建应用、获取 Key3、用量管理2、Cline 配置模型 二、接入三、测试官方测试 - 出行规划专属地图 四、关于 高德 MCP Server - AI时代的出行服务中台1、产品定位2、技术架构亮点3、核心API能力矩阵4、开发者优势5、典型应用场…...

Linux的MySQL头文件和找不到头文件问题解决

头文件 #include <iostream> #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/statement.h> #include <cppconn/resultset.h> #include <cppconn/prepared_statement.h> #include <cppconn/exception.h&g…...

进程和线程的区别和联系

二者概念 进程 运行起来一个程序就会在操作系统产生一个或多个进程 进程属于软件资源。 进程是操作系统中资源分配的基本单位。 每个进程拥有独立的 内存空间、文件描述符、系统资源。 进程之间相互隔离&#xff0c;一个进程崩溃不会直接影响其他进程。 操作系统管理进程…...

SHAP分析图的含义

1. 训练集预测结果对比图 表征含义&#xff1a; 展示模型在训练集上的预测值&#xff08;红色曲线&#xff09;与真实值&#xff08;灰色曲线&#xff09;的对比。通过曲线重合度可直观判断模型的拟合效果。标题中显示的RMSE&#xff08;均方根误差&#xff09;量化了预测值与…...

PointNet++:点云处理的升级版算法

在三维计算机视觉和机器学习领域&#xff0c;点云数据的处理一直是一个关键问题。点云是由一系列三维坐标点组成的集合&#xff0c;这些点可以描述物体的形状和结构。然而&#xff0c;由于点云的无序性和不规则性&#xff0c;传统的处理方法往往难以直接应用。PointNet算法的出…...

PostGIS实现矢量数据转栅格数据【ST_AsRaster】

ST_AsRaster函数应用详解&#xff1a;将矢量数据转换为栅格数据 [文章目录] 一、函数概述 二、函数参数与分组说明 三、核心特性与注意事项 四、示例代码 五、应用场景 六、版本依赖 七、总结 一、函数概述 ST_AsRaster是PostGIS中用于将几何对象&#xff08;如点、线…...

【PyQt5实战】五大对话框控件详解:从文件选择到消息弹窗

对话框是人机交互的重要组件&#xff0c;PyQt5提供了一系列标准对话框满足不同场景需求。本文将深入解析QDialog及其子类的使用方法&#xff0c;助你快速掌握GUI开发核心交互功能。 对话框基础&#xff1a;QDialog QDialog是所有对话框的基类&#xff0c;支持模态/非模态两种…...

机器学习-人与机器生数据的区分模型测试 - 模型选择与微调

内容继续机器学习-人与机器生数据的区分模型测试 整体模型的准确率 X_train_scaled pd.DataFrame(X_train_scaled,columns X_train.columns ) X_test_scaled pd.DataFrame(X_test_scaled,columns X_test.columns)from ngboost.distns import Bernoulli # 模型训练和评估 m…...

学习黑客Active Directory 入门指南(四)

Active Directory 入门指南&#xff08;四&#xff09;&#xff1a;组策略的威力与操作主机角色 &#x1f4dc;&#x1f451; 大家好&#xff01;欢迎来到 “Active Directory 入门指南” 系列的第四篇。在前几篇中&#xff0c;我们已经构建了对AD逻辑结构、物理组件、关键服务…...

十一、STM32入门学习之FREERTOS移植

目录 一、FreeRTOS1、源码下载&#xff1a;2、解压源码 二、移植步骤一&#xff1a;在需要移植的项目中新建myFreeRTOS的文件夹&#xff0c;用于存放FREERTOS的相关源码步骤二&#xff1a;keil中包含相关文件夹和文件引用路径步骤三&#xff1a;修改FreeRTOSConfig.h文件的相关…...

Spring ioc和Aop

IOC 在传统Java当中&#xff0c;我们的对象都需要new关键字来生成&#xff0c;这在面对很多对象的情况产生了不必要的麻烦&#xff0c;因为我不需要在一个项目中一直做重复的事情&#xff0c;那怎么办把&#xff0c;自然而然的一些好的框架就诞生了&#xff0c;避免我们去做这…...

动态内存管理2+柔性数组

一、动态内存经典笔试题分析 分析错误并改正 题目1 void GetMemory(char *p) {p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); } int main() {Test();return 0; }错误的原因&#xff1a; …...

USB传输速率 和 RS-232/RS-485串口协议速率 的倍数关系

一、技术背景 RS-232&#xff1a;传统串口标准&#xff0c;典型速率 115.2 kbps&#xff08;最高约 1 Mbps&#xff09;。RS-485&#xff1a;工业串口标准&#xff0c;典型速率 10 Mbps&#xff08;理论最高可达 50 Mbps&#xff09;。USB&#xff1a;不同版本差异巨大&#x…...

多线程代码案例-4 线程池

1、引入 池是一个非常重要的概念&#xff0c;我们有常量池&#xff0c;数据库连接池&#xff0c;线程池&#xff0c;进程池&#xff0c;内存池…… 池的作用&#xff1a; 1、提前把要用的对象准备好 2、用完的对象也不立即释放&#xff0c;先留着以备下次使用&#xff0c;提…...

JSON Schema 高效校验 JSON 数据格式

在数据交换和API开发中&#xff0c;JSON 已成为最流行的数据格式之一。但你是否遇到过这些困扰&#xff1f; 接收的JSON字段缺失关键数据&#xff1f;数值类型意外变成了字符串&#xff1f;嵌套结构不符合预期&#xff1f; JSON Schema 正是解决这些问题的利器。本文将带你全…...

机器学习09-正规方程

机器学习笔记&#xff1a;正规方程&#xff08;Normal Equation&#xff09; 概述 正规方程是线性回归中求解参数的一种解析方法。它基于最小化损失函数&#xff08;如最小二乘法&#xff09;来直接计算出参数的最优值。在机器学习中&#xff0c;这种方法尤其适用于特征数量不…...

Java大师成长计划之第26天:Spring生态与微服务架构之消息驱动的微服务

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4-turbo模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在现代微服务架构中&#xff0c;服务…...

Linux 文件(1)

1. 文件 1.1 文件是什么 一个文件&#xff0c;是由其文件属性与文件内容构成的。文件属性又称为一个文件的元数据&#xff0c;因此如果一个文件&#xff0c;内容为空&#xff0c;这个文件依然要占据磁盘空间。 1.2 文件在哪里 一个文件&#xff0c;如果没有被打开&#xff…...

程序代码篇---python向http界面发送数据

文章目录 前言 前言 本文简单接受了python向http界面发送数据...

【iOS】探索消息流程

探索消息流程 Runtime介绍OC三大核心动态特性动态类型动态绑定动态语言 方法的本质代码转换objc_msgSendSELIMPMethod 父类方法在子类中的实现 消息查找流程开始查找快速查找流程慢速查找流程二分查找方法列表父类缓存查找 动态方法解析动态方法决议实例方法类方法优化 消息转发…...

院校机试刷题第六天:1134矩阵翻转、1052学生成绩管理、1409对称矩阵

一、1134矩阵翻转 1.题目描述 2.解题思路 很简单的模拟题&#xff0c;甚至只是上下翻转&#xff0c;遍历输出的时候先把最下面那一行输出即可。 3.代码 #include <iostream> #include <vector> using namespace std;int main() {int n;cin >> n;vector&l…...

DeepSeek在简历筛选系统中的深度应用

一、多模态解析引擎的技术突破 1.1 复杂格式的精准解析 针对简历格式多样性挑战,DeepSeek采用三级解析架构: 格式标准化层:基于Transformer的DocParser模型支持200+种文档格式转换视觉特征提取:使用改进的YOLOv8进行证书印章识别(mAP@0.5达93.7%)语义重构模块:通过注意…...

c++多线程debug

debug demo 命令行查看 ps -eLf|grep cam_det //查看当前运行的轻量级进程 ps -aux | grep 执行文件 //查看当前运行的进程 ps -aL | grep 执行文件 //查看当前运行的轻量级进程 pstree -p 主线程ID //查看主线程和新线程的关系 查看线程栈结构 pstack 线程ID 步骤&…...

【回溯 剪支 状态压缩】# P10419 [蓝桥杯 2023 国 A] 01 游戏|普及+

本文涉及知识点 C回溯 位运算、状态压缩、枚举子集汇总 P10419 [蓝桥杯 2023 国 A] 01 游戏 题目描述 小蓝最近玩上了 01 01 01 游戏&#xff0c;这是一款带有二进制思想的棋子游戏&#xff0c;具体来说游戏在一个大小为 N N N\times N NN 的棋盘上进行&#xff0c;棋盘…...

CUDA 纹理入门

一、什么是CUDA纹理 CUDA纹理是NVIDIA GPU提供的一种特殊内存访问机制,它允许高效地访问和过滤结构化数据。纹理内存最初是为图形渲染设计的,但在通用计算(GPGPU)中也很有用。 二、纹理内存的优势 缓存优化:纹理内存有专用的缓存,适合空间局部性好的访问模式 硬件过滤:支…...

大模型微调步骤整理

在对深度学习模型进行微调时,我通常会遵循以下几个通用步骤。 第一步是选择一个合适的预训练模型。PyTorch 的 torchvision.models 模块提供了很多经典的预训练模型,比如 ResNet、VGG、EfficientNet 等。我们可以直接使用它们作为模型的基础结构。例如,加载一个预训练的 Re…...

【GPT入门】第39课 OPENAI官方API调用方法

【GPT入门】第39课 OPENAI官方API调用方法 1. OPENAI 免费API2. openai调用最简单的API3.apiKey提取到环境变量 1. OPENAI 免费API 需要科学上网&#xff0c;可以调用 gpt-4o-mini 的 api, 使用其它旧的GPT&#xff0c;反而可能需要收费&#xff0c;例如 gpt-3.5-turbo 2. op…...

【DeepSeek论文精读】11. 洞察 DeepSeek-V3:扩展挑战和对 AI 架构硬件的思考

欢迎关注[【AIGC论文精读】](https://blog.csdn.net/youcans/category_12321605.html&#xff09;原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】7. DeepSeek 的发展历程与关键技术 【DeepSeek论文精读】11. 洞察 DeepSeek-V3&#xff…...

MySQL事务的一些奇奇怪怪知识

Gorm事务有error却不返回会发生什么 Gorm包是大家比较高频使用。正常的用法是&#xff0c;如果有失败返回error&#xff0c;整体rollback&#xff0c;如果不返回error则commit。下面是Transaction的源码&#xff1a; // Transaction start a transaction as a block, return …...

C语言内存函数与数据在内存中的存储

一、c语言内存函数 1、memcpy函数是一个标准库函数&#xff0c;用于内存复制。功能上是用来将一块内存中的内容复制到另一块内存中。用户需要提供目标地址、源地址以及要复制的字节数。例如结构体之间的复制。 memcpy函数的原型是&#xff1a;void* memcpy&#xff08;void* …...

Power BI Desktop运算符和新建列

1.运算符 运算符 含义 加 - 减 * 乘 / 除 ^ 幂 运算符 含义 等于 > 大于 < 小于 > 大于等于 < 小于等于 <> 不等于 运算符 含义 && 与 || 或 not 非 & 字符串连接 in 包含 not in 不包含 2.新建列 …...

windows 安装gdal实现png转tif,以及栅格拼接

windows 安装gdal实现png转tif&#xff0c;以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法&#xff0c;此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装&#xff0c;前面部分很简单&#xff0c;就不再…...

【嵙大o】C++作业合集

​ 参考&#xff1a; C swap&#xff08;交换&#xff09;函数 指针/引用/C自带-CSDN博客 Problem IDTitleCPP指针CPP引用1107 Problem A编写函数&#xff1a;Swap (I) (Append Code)1158 Problem B整型数据的输出格式1163 Problem C时间&#xff1a;24小时制转12小时制1205…...

论信息系统项目的采购管理

论信息系统项目的采购管理 背景一、规划采购管理二、实施采购三、控制采购结语 背景 某市为对扶贫对象实施精确识别、精确帮扶、精确管理&#xff0c;决定由民政部门牵头&#xff0c;建设家庭经济状况分析及市、县&#xff08;区&#xff09;、镇&#xff08;街&#xff09;三级…...

创建型:单例模式

目录 1、核心思想 2、实现方式 2.1 饿汉式 2.2 懒汉式 2.3 枚举&#xff08;Enum&#xff09; 3、关键注意事项 3.1 线程安全 3.2 反射攻击 3.3 序列化与反序列化 3.4 克隆保护 4、适用场景 1、核心思想 目的&#xff1a;确保一个类仅有一个实例 功能&#xff1a;…...

职场方法论总结(4)-如何正确地汇报

一、明确汇报目标 区分类型&#xff1a;是项目进展汇报&#xff1f;数据总结&#xff1f;问题解决方案&#xff1f;还是资源申请&#xff1f;明确目标才能聚焦内容。听众需求&#xff1a; 所有人都希望你用最简短的语言把事情讲清楚&#xff0c;节省时间领导关注结果、风险和资…...

STM32SPI实战-Flash模板

STM32SPI实战-Flash模板 一&#xff0c;常用指令集&#xff08;部分&#xff09;二&#xff0c;组件库GD25QXX API 函数解析1,前提条件2,初始化与识别1, void spi_flash_init(void)2, uint32_t spi_flash_read_id(void) 3,擦除操作1, void spi_flash_sector_erase(uint32_t sec…...

CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…...

【Retinanet】训练自己的数据集

目录 1.下载源码2.配置环境3.数据集准备4.训练自己的数据5.成功训练&#xff01; 1.下载源码 Retinanet代码&#xff1a;代码 下载到你的目录中&#xff0c;进行打开。 2.配置环境 这里就是cudapytorch&#xff0c;没有配置过的可以参考博客&#xff1a; 深度学习环境的搭建…...

微软将于 8 月 11 日关闭 Bing Search API 服务

微软宣布将于 2025 年 8 月 11 日正式关闭 Bing Search API 服务。届时&#xff0c;所有使用 Bing Search API 的实例将完全停用&#xff0c;同时不再接受新用户注册。 此次停用决定主要影响 Bing Search F1 及 S1 到 S9 资源的用户&#xff0c;以及 Custom Search F0 与 S1 到…...

探索 Python 的利器:help()、dir() 与 AI 工具的结合应用

引言 在编程世界中,Python 以其简洁的语法、强大的功能和丰富的库生态系统成为众多开发者的首选语言。无论是初学者还是资深工程师,在学习新模块、调试代码或探索未知功能时,常常需要有效的工具来帮助理解和解决问题。Python 提供了内置的 help() 和 dir() 函数,让开发者能…...

MySQL查询优化器底层原理解析:从逻辑优化到物理优化

MySQL查询优化器底层原理解析&#xff1a;从逻辑优化到物理优化 引言 在数据库系统中&#xff0c;SQL语句的执行效率直接影响着整个应用的性能表现。一条普通的SQL执行前会经历五个关键阶段&#xff1a;SQL输入、语法分析、语义检查、SQL优化、SQL执行。其中&#xff0c;SQL优…...

UI架构的历史与基础入门

本笔记的目的是通过一系列连贯的例子来探讨“事物-模型-视图-编辑器”这一隐喻。 这些例子都来自我的规划系统&#xff08;planning system&#xff09;&#xff0c;用于解释上述四个概念。所有例子都已实现&#xff0c;但并未在本文描述的清晰类结构中实现。 这些隐喻对应于《…...

(三)MMA(KeyCloak身份服务器/OutBox Pattern)

文章目录 项目地址一、KeyCloak二、OutBox Pattern2.1 配置Common模块的OutBox1. OutboxMessage2. 数据库配置OutboxMessageConfiguration3. 创建Save前的EF拦截器4. 创建Quartz后台任务5. 配置后台任务6. 注册服务2.2 创建OutBox的消费者项目地址 教程作者:教程地址:代码仓库…...

【通用智能体】Playwright:跨浏览器自动化工具

Playwright&#xff1a;跨浏览器自动化工具 一、Playwright 是什么&#xff1f;二、应用场景及案例场景 1&#xff1a;端到端&#xff08;E2E&#xff09;测试场景 2&#xff1a;UI 自动化&#xff08;表单批量提交&#xff09;场景 3&#xff1a;页面截图与 PDF 生成场景 4&am…...

单片机设计_停车场车位管理系统(AT89C52、LCD1602)

想要更多项目私wo!!! 一、电路设计 此电路由AT89C52单片机和LCD1602液晶显示模块等器件组成。 二、运行结果 三、部分代码 #include <reg52.h> //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned…...

【android bluetooth 协议分析 01】【HCI 层介绍 5】【SetEventMask命令介绍】

1. HCI_Set_Event_Mask 命令作用 项目内容命令名HCI_Set_Event_MaskOCF0x0001作用主机通过设置 Event Mask 告诉控制器&#xff1a;我只对某些事件感兴趣&#xff0c;屏蔽其他事件&#xff0c;以减少中断。事件来源事件是 HCI 与主机之间通信的反馈机制&#xff0c;控制器通过…...

python打卡day29

类的装饰器 知识点回顾 类的装饰器装饰器思想的进一步理解&#xff1a;外部修改、动态类方法的定义&#xff1a;内部定义和外部定义 回顾一下&#xff0c;函数的装饰器是 &#xff1a;接收一个函数&#xff0c;返回一个修改后的函数。类也有修饰器&#xff0c;类装饰器本质上确…...