[机器学习]XGBoost(3)——确定树的结构
XGBoost的目标函数详见[机器学习]XGBoost(2)——目标函数(公式详解)
确定树的结构
之前在关于目标函数的计算中,均假设树的结构是确定的,但实际上,当划分条件不同时,叶子节点包含的样本不同,计算的 H j H_j Hj 和 G j G_j Gj不同,每个叶子节点的W值也就不同
每一棵树都有属于自己最优的 O b j ∗ Obj^* Obj∗,因此要找一种最优的划分方式,即要找出使得 O b j ∗ Obj^* Obj∗最小的树作为基学习器的决策树
- 穷举法:计算所有可能的组合情况,然后选出最小的 O b j ∗ Obj^* Obj∗
缺点:在实际应用中,穷举所有可能的分裂点通常是不可行的,因为计算成本太高。 - 精确贪心算法:每次选择最优的分裂点
XGBoost用的是精确贪心算法
精确贪心算法
在XGBoost中,用精确贪心算法在构建决策树的过程中选择最优的分裂点。这种方法旨在找到能够最大化目标函数增益的分裂点,从而提高模型的预测性能。
核心思想:
- 贪心选择:在每一步分裂决策中,算法不是寻找全局最优解,而是做出局部最优选择。这意味着在当前步骤中,选择能够最大程度降低目标函数(损失函数和正则化项之和)的分裂点。
- 精确计算:对于每个可能的分裂点,精确计算分裂后的增益。增益是通过比较分裂前后的目标函数值来计算的,即增益等于分裂前的目标函数值减去分裂后所有子节点目标函数值的总和。
- 递归分裂:一旦选择了最优分裂点,算法将递归地对每个子节点重复分裂过程,直到满足停止条件(如达到最大树深度、增益小于阈值或子节点中的样本数小于某个阈值)。
算法步骤
-
初始化:开始时,所有样本都在根节点。初始化目标函数 Obj 为所有样本的损失之和。
-
计算增益:对于每个可能的分裂点,计算分裂后的增益。增益是通过比较分裂前后的目标函数值来计算的,即增益 = 父节点的目标函数值 - 子节点的目标函数值之和。
- 对于每个子节点 j,目标函数 Obj_j 可以表示为 O b j j = γ + 0.5 ∗ ( G j 2 / ( H j + λ ) ) Obj_j = γ + 0.5 * (G_j^2 / (H_j + λ)) Objj=γ+0.5∗(Gj2/(Hj+λ))
其中 G j G_j Gj 是子节点上所有样本梯度的和, H j H_j Hj 是Hessian的和,这两个都是可以计算的。 - 增益 Gain 可以表示为: G a i n = O b j p a r e n t − [ O b j l e f t + O b j r i g h t ] Gain = Obj_{parent} - [Obj_{left} + Obj_{right}] Gain=Objparent−[Objleft+Objright]
其中, O b j p a r e n t Obj_{parent} Objparent 是父节点的目标函数值, O b j l e f t Obj_{left} Objleft 和 O b j r i g h t Obj_{right} Objright 是分裂后左右子节点的目标函数值。
- 对于每个子节点 j,目标函数 Obj_j 可以表示为 O b j j = γ + 0.5 ∗ ( G j 2 / ( H j + λ ) ) Obj_j = γ + 0.5 * (G_j^2 / (H_j + λ)) Objj=γ+0.5∗(Gj2/(Hj+λ))
-
选择最佳分裂:在所有可能的分裂点中,选择增益最大的分裂点作为最优分裂。这个分裂点将被用来将当前节点分裂为两个子节点。
-
更新目标函数:使用最优分裂点分裂节点后,更新目标函数。计算每个子节点上的 G j G_j Gj和 H j H_j Hj,并更新 O b j Obj Obj。
-
递归构建:对每个新创建的子节点重复步骤2-4,直到满足停止条件(如达到最大深度或增益小于阈值)。
什么时候停止划分?
-
最大增益小于一个很小的数:如果进一步划分带来的增益小于预设的最小增益阈值(min_split_gain),则不会进行分裂。这个阈值用于控制只有当分裂能够显著提高模型性能时,才会进行分裂。
-
叶子节点包含样本个数小于等于1:如果一个叶子节点中的样本数量小于或等于1,那么这个叶子节点将不再进一步划分。这是为了防止树的过拟合,因为单个样本的分裂不会提供泛化能力。
-
达到最大树深度:如果树的深度已经达到预设的最大深度(max_depth),则停止进一步划分。
算法伪代码
输入参数:
- I:当前节点的所有样本实例。
- d:特征的维度,即数据集中特征的数量。
初始化:
- gain:初始化为0,用来存储在所有可能的分裂中找到的最大增益值。
- G:所有样本梯度的总和。
- H:所有样本Hessian的总和。
算法步骤:
-
遍历所有特征:对于每个特征 k(从1到特征总数 m),执行以下操作。
-
初始化左右子树的梯度和Hessian和: G L G_L GL 和 H L H_L HL 分别初始化为0,用来存储左子树的梯度和和Hessian和。
-
对样本按特征值排序:将样本集 I 按照特征 k 的值进行排序。
注意:不同特征会划分出不同的样本集,所以每次排序都要重新排。当特征非常多时,排序操作非常耗时 -
计算左右子树的统计量:遍历排序后的样本,逐步构建左子树的统计量(GL 和 HL),同时计算右子树的统计量(GR = G - GL 和 HR = H - HL)。
-
计算分裂增益:使用公式计算当前分裂点的增益 score:
score = G L 2 H L + λ + G R 2 H R + λ − G 2 H + λ \text{score} = \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{G^2}{H + \lambda} score=HL+λGL2+HR+λGR2−H+λG2
如果当前分裂点的增益大于之前记录的最大增益 gain,则更新 gain。 -
选择最佳分裂:在所有特征和所有可能的分裂点中,选择增益最大的分裂点作为最终的分裂点。
输出:
具有最大增益的分裂点,这将用于构建决策树的节点分裂。
算法优化——近似算法
针对不同特征会划分出不同的样本集,所以每次排序都要重新排的问题进行优化(以牺牲精度为代价)
- 压缩特征
- 采样特征值
压缩特征——列采样
按树随机采样(Tree-wise Subsampling):
在构建每棵树之前,从所有特征中随机选择一部分特征进行考虑。例如一共有X1……X10个特征,选3个特征X1,X5,X7,之后每次计算都只用这三个特征
优点:
- 减少每棵树的计算量,因为每次分裂只考虑一部分特征,可能的分裂点减少,gain值的个数减少。
- 有助于防止过拟合,因为模型不会对所有特征都过于敏感。
缺点:
- 固定随机选择的特征可能会忽略一些对模型预测性能有重要影响的特征,导致模型无法充分利用所有特征信息。(每次都只用X1,X5,X7,可能忽略其他特征的信息)
按层随机采样(Level-wise Subsampling):
在构建树的每个层级时,都重新对特征进行采样。例如一共有X1……X10个特征,第一层根节点选3个特征X1,X5,X7,之后每次计算都重新选三个特征,第二层左节点用X2,X3,X4,第二层右节点用X1,X8,X10……
优点:
- 减少每棵树的计算量,因为每次分裂只考虑一部分特征,可能的分裂点减少,gain值的个数减少。
- 确保每一层的分裂都有新的随机特征选择,增加了模型的多样性。
- 通常比按树随机采样更复杂,但可能提供更好的性能。
分桶采样特征值
在构建树的每个层级时,对特征的值进行采样,而不是使用全部特征值。例如,对于每个特征 X i,将其值域分成 k 组,从每个特征的 k 组中随机选择一个值,这样总共选择了 k 个特征值。
优点:
- 减少每个特征的计算量,因为每个特征的计算只考虑一部分特征值, H j H_j Hj和 G j G_j Gj计算量变小。
注意:
- 不是随机选取,是先分桶,再从每个桶里选一个代表
- 理想化假设特征值均匀分布,每个桶里的特征值数量应该尽量接近,但实际并不是这样的,因此用加权分位法
加权分位法
-
收集梯度和Hessian:对于每个特征,收集所有样本的梯度 g i g_i gi 和Hessian h i h_i hi
-
计算权重:样本权重通常与梯度和Hessian有关。在XGBoost中,样本权重可以是Hessian的函数表示。
-
排序:根据样本权重对特征的所有可能值进行排序。具有更高权重的样本在排序中会有更大的影响力。
-
计算分位数:在排序后的特征值上,根据预设的桶数量(由参数 max_bin 控制)计算分位数。这些分位数将用作桶的边界。
-
分桶:使用计算出的分位数将特征值域分割成若干个桶。每个桶代表特征值的一个区间。
-
选择代表值:从每个桶中选择一个代表值,这个值将用于构建模型。在XGBoost中,这个值通常是桶中所有样本梯度和的加权平均值。
策略
- 全局策略
分一次桶,以后每次都按这个分法来分 - 局部策略
每次都重新分一次桶
缺失值处理 Sparsity-aware Split Finding
实际场景拿到的数据是很稀疏的,有大量缺失值,因此需要处理缺失值
- 穷举法:为所有组合计算增益,选最大的
- 贪心法:把每个缺失值分别放到左边和右边计算gain,比较两个gain的大小,这样要计算
2*缺失值个数
次 - 论文采用的方法:把所有缺失值当成整体看待,都同时放到左边计算一个gain,再把所有缺失值放到右边计算一个gain,比较两个gain的大小,然后把所有缺失值样本全部放到gain大的那边。这样只用计算
2
次
注意:加权分位法中缺失值不参与排序和分桶
学习率 shrinkage
目的:为了防止过拟合
相关文章:
[机器学习]XGBoost(3)——确定树的结构
XGBoost的目标函数详见[机器学习]XGBoost(2)——目标函数(公式详解) 确定树的结构 之前在关于目标函数的计算中,均假设树的结构是确定的,但实际上,当划分条件不同时,叶子节点包含的…...
Hutool工具包的常用工具类的使用介绍
前言 Hutool 是一个轻量级的 Java 工具类库,提供了非常丰富的工具方法,可以大大减少开发时的重复性工作。它的目标是让 Java 开发更简单、更高效。Hutool 提供了多种常用功能,以下是一些常用工具类的使用介绍: 1. StrUtil - 字符…...
ETCD备份还原
环境准备: master 192.168.8.128 node1 192.168.8.129 k8s版本: 一:安装etcdctl工具 1.1下载安装包: wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz 1.2解压&…...
服务器防火墙设置某个端口号只允许固定 ip地址访问
服务器防火墙设置某个端口号只允许固定 ip地址访问是运维常见的功能,今天我们分享一下: 一、Linux环境 1、firewall 方式 1)允许特定 IP 地址访问 23 端口 sudo firewall-cmd --zonepublic --add-rich-rulerule family"ipv4" s…...
FPGA 基础了解
前言 前期一直在做关于FPGA方面的开发,从开始认真玩FPGA到参考原子、野火、黑金、米联客的教学资料再到参与做项目中,中途也参加了两个比赛整也都获得不错的成绩,整个阶段持续了大概快一年半的时间,学习了乱七八糟的知识…...
Golang学习历程【第二篇 fmt包变量、常量的定义】
Golang学习历程【第二篇 fmt包&变量、常量的定义】 1. fmt 包1.1 打印(print)1.1.1 Print 打印1.1.2 Println 打印后换行1.1.3 Printf 打印格式化参数 1.2 输入(Scan)1.2.1 Scan 输入1.2.2 Scanf 格式化输入 2. 变量2.1 变量的声明2.2 变量初始化&am…...
深入QML语法
文章目录 深入了解 QML 文档的结构和语法什么是 QML 文档?导入语句导入语句的格式示例 对象声明基本语法示例更复杂的对象声明 QML 对象类型详解1. Rectangle(矩形)2. Gradient(渐变)3. Text(文本ÿ…...
Viggle Api上线V3-beta模型,圣诞节跳舞视频来临
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能 Viggle AI:打造爆款 AI 视频,让照片 “踢” 起足球 又一款AI对口型神器,让…...
前端excel的实现方案Luckysheet
一、介绍 Luckysheet是一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源的插件。目前已暂停维护,但是其已有功能大概能满足常见需求的使用。 二、引入 ①cdn引入(目前应该已经不支持,可自行尝试) <l…...
数据字典类型/条目表的设计目的
1.以前的设计思路 对于下拉框选项储存的思路 我们以前是直接针对每一个下拉框都关联一个表格于数据库中 这种行为很不妥当 如果对于不同业务情景下的相同下拉框来说 多个相同下拉框就会在数据库中产生多个表格 当某个下拉框的选项需要更新或者新增时 那么对应的需要同步更新相…...
abc 383 C (bfs 最短路 )D(唯一分解定理,欧拉筛)
C 题: 首先暴力的想,对于每一个加湿器的位置去 上下左右扩展是 nm 的复杂度 。最多会有 nm 个加湿器。所以复杂度到达了n^3 。肯定超时了。 我们可以发现 对于一个点 会标记很多次,这回导致超时。 可以采用类似 bfs 求最短路的形式ÿ…...
常用消息中间件介绍
在消息中间件这个领域,确实有不少专业且强大的选择,它们各自都有着独特的优势和适用场景。 1. Apache Kafka: • Kafka以其高吞吐量、低延迟和分布式架构著称,非常适合处理大数据量、实时性要求高的场景。 • 它支持发布/订阅模式…...
vue基础
1.v-text,v-html <!-- v-text,v-html都可以显示内容 ,v-html可以解析html标签--> <p>{{msg}}</p> <p v-text"msg"></p> <p v-html"msg"></p> <script> let appnew Vue({ el:"#max", data:{ ms…...
从Windows远程访问Linux上的数据库
从Windows远程访问Linux上的数据库 目录 简介在Linux上安装MySQL/MariaDB配置MySQL/MariaDB以允许远程连接 修改MySQL/MariaDB配置文件重启MySQL/MariaDB服务确保防火墙允许MySQL/MariaDB端口 创建远程访问用户授予用户权限测试远程连接 检查网络连通性使用图形化工具连接 创…...
Android HandlerThread、Looper、MessageQueue 源码分析
Android HandlerThread、Looper、MessageQueue 源码分析 简介 在 Android 开发中,大家应该对 HandlerThread 有一定了解。顾名思义,HandlerThread 是 Thread 的一个子类。与普通的 Thread 不同,Thread 通常一次只能执行一个后台任务&#x…...
ASP.NET |日常开发中定时任务详解
ASP.NET |日常开发中定时任务详解 前言一、定时任务的概念与用途1.1 定义1.2 应用场景 二、在ASP.NET中实现定时任务的方式2.1 使用System.Timers.Timer2.2 使用Quartz.NET 三、定时任务的部署与管理3.1 部署考虑因素3.2 管理与监控 结束语优质源码分享 ASP.NET &am…...
Unity动态读取外部图片转Texture2D,内存过大问题解决方案
问题描述 加载原始图片2.63M的图片,分辨率为3023*4032,占用内存108.5M 加载原始图片12.6 M的图片,分辨率为6000*8000,占用内存427.2M 太恐怖了吧 解决方案 1.加载完图片,等比缩放,宽高改为1024或者512以下 1024占用5.2M,512占用1.3M,相比小了很多 2.原始Texture2…...
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 ,拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询,根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…...
人工智能练习题--大题题库速通指南
随着人工智能(AI)技术的快速发展,越来越多的企业和个人开始重视AI的应用和发展。在这个背景下,人工智能训练师这一职业应运而生,他们专注于数据标注、模型训练、算法优化等方面的工作,以确保AI系统能够准确…...
写给Pythoner的前端进阶指南(四):异步编程 - 原生支持的 async/await
在开发中,异步编程是处理并发任务的重要方式。无论是请求数据、读取文件还是执行网络操作,异步编程能够有效提升程序的性能和响应速度。Python 和 JavaScript 都支持异步编程,但它们的实现方式有所不同。在这篇文章中,我们将深入探…...
项目搭建+姓名唯一性校验
一 : 添加时对姓名进行唯一性校验 ① : 给姓名绑定一个改变事件 ② : 取值 ③ : 组装对象 ④ : ajax (Controller定义对姓名唯一性校验的方法) 在成功回调函数里 判断姓名是否添加过(0>已添加 1>未添加) 未添加过,添加成功后,(清空) /*** 对姓名进行唯一性校验*/$("…...
MacOS下PostIn安装配置指南
PostIn是一款开源免费的接口管理工具, 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业,实现对数据和系统的完全控制。   1、MacOS服务端安装 Mac安装包下载地址:下载Mac安…...
时光回响,中原之声 ——漓岛⾳乐节x SONICE
音乐像呼吸一样在大地起伏,中原的回响透过时空,从遥远的内陆弥漫扩散至温暖的南方,年轻的呼唤似一阵快雨淋落在辽阔的海面,波澜游弋,终掀浪涛。来自中原的独立音乐厂牌SONICE将与澄迈漓岛音乐节联合呈现乘风舞台&#…...
获取apk信息(包名,版本等) aapt dump badging (apk文件路径)
1.找到sdk路径下aapt文件: Android\Sdk\build-tools\29.0.0 (29.0.0是构建版本,可以是其他版本如27.0.3) 2.window dos窗口cd 到这个路径下:Android\Sdk\build-tools\29.0.0 ,也可以配置到 环境变量 3.执行 aapt dump badging (apk文件路径…...
C++ 23版的最新特性
C 23 是 C 编程语言的最新标准版本,于 2023 年正式发布,带来了诸多新特性与改进,以下是一些主要内容: 1.语言特性 1.显式对象参数(Deducing this):显式对象参数(Deducing this&…...
【微信小程序开发 - 3】:项目组成介绍
文章目录 项目组成介绍项目的基本组成结构小程序页面的组成部分JSON配置文件的作用app.json文件project.config.json文件sitemap.json文件页面的 .json 配置文件新建小程序页面修改项目首页 XWML模板XWML 和 HTML 的区别 WXSS样式WXSS 和 CSS 的区别 .js文件 项目组成介绍 项目…...
分布式超低耦合,事件驱动架构(EDA)深度解析
目录 引言什么是事件驱动架构(EDA)事件驱动架构的基本原理事件驱动架构的特点与优势事件驱动架构与分布式系统事件驱动架构的关键组件事件驱动架构的实施步骤常见的事件驱动架构模式事件驱动架构在分布式系统中的应用场景挑战与解决方案总结 引言 在当…...
深入理解 Linux wc 命令
文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…...
轻松拿捏Spring
目录 Spring基础 什么是Spring框架 Spring 包含的模块有哪些? Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架 Spring 是一款开源的轻量级 Java 开发框…...
使用 `du` 命令可以查看根目录下每个子目录占用的磁盘空间大小
使用 du 命令可以查看根目录下每个子目录占用的磁盘空间大小。 查看根目录下子目录大小的命令 sudo du -sh /*解释: du:显示文件和目录的磁盘使用情况。-s:只显示每个目录的总大小(不递归显示子目录)。-h࿱…...
Python练习之列表的使用
(搭配主页知识点) 【练习要求】 针对知识点列表定义、追加、列表元素读取、查找安排的本实例。要求实现:有一个列表,内容是:[21,25,21,23,22,20],记录的是一批学生的年龄请通过列表的功能(方法),对其进行…...
深入理解 HTTP HEAD 请求:节省带宽、提高效率的秘密武器
序言: 在HTTP协议中,HEAD请求是一种非常实用且被忽略的请求方法。与GET请求相似,HEAD请求同样从服务器获取资源,但与GET请求的最大不同之处在与,HEAD请求 仅返回响应的头部信息,不包含内容提。这使得HEAD请…...
电商数据流通的未来:API接口的智能化与自动化趋势
在数字化时代,电子商务行业正在以前所未有的速度发展,而API(应用程序编程接口)接口作为电商领域的重要组成部分,其应用和发展趋势也日益受到关注。API接口作为电商系统与外部服务或平台交互的桥梁,对电商数…...
[python]使用flask-caching缓存数据
简介 Flask-Caching 是 Flask 的一个扩展,为任何 Flask 应用程序添加了对各种后端的缓存支持。它基于 cachelib 运行,并通过统一的 API 支持 werkzeug 的所有原始缓存后端。开发者还可以通过继承 flask_caching.backends.base.BaseCache 类来开发自己的…...
13.罗意文面试
1、工程化与架构设计(考察项目管理和架构能力) 1.1 你负责的可视化编排项目中,如何设计组件的数据结构来支持"拖拉拽"功能?如何处理组件间的联动关系? // 组件数据结构示例 {components: [{id: comp1,type…...
有监督学习 vs 无监督学习:机器学习的两大支柱
有监督学习 vs 无监督学习:机器学习的两大支柱 有监督学习 vs 无监督学习:机器学习的两大支柱一、有无“老师”来指导二、解决的问题类型不同三、模型的输出不同 有监督学习 vs 无监督学习:机器学习的两大支柱 在机器学习的奇妙世界里&#…...
创建第一个QML项目
文章目录 使用 Qt Creator 创建 Qt Quick 项目详解为什么选择 Qt Creator?1. 打开 Qt Creator2. 选择项目模板3. 设置项目名称与路径4. 定义项目细节5. 配置构建套件6. 检查项目配置7. 编译并运行项目后续操作修改界面添加功能 总结 使用 Qt Creator 创建 Qt Quick …...
【k8s集群应用】K8S二进制安装大致步骤(简略版)
文章目录 K8S二进制安装部署etcd测试etcd集群(可选)恢复etcd数据库 部署master组件部署node组件K8S kubeadm安装关键命令更新kubeadm安装的K8S证书有效期方法一方法二查看证书有效期 K8S二进制安装 部署etcd 使用cfssl工具签发证书和私钥下载解压etcd软…...
cudnn版本gpu架构
nvcc --help 可以看 --gpu-architecture 写到的支持的架构 NVIDIA 的 GPU 架构是按代次发布的,以下是这些架构的对应说明: NVIDIA Hopper: 这是 NVIDIA 于 2022 年推出的架构之一,面向高性能计算(HPC)和人工智能&…...
智能体实战(需求分析助手)一、需求概述及迭代规划
需求分析助手开发迭代规划 功能概述 需求分析助手是一款基于大模型的智能系统,旨在帮助用户高效完成需求获取、需求分析、需求文档编写及需求验证的全流程工作。通过对用户输入的智能处理和分析,需求分析助手能够简化需求管理流程,并根据不同业务场景提供定制化支持。 核心…...
二叉搜索树Ⅲ【东北大学oj数据结构8-3】C++
二叉搜索树 III B:在二叉搜索树II中加入delete指令,创建程序对二叉搜索树T执行如下指令。 插入 k:将key k 插入到 T 中。 find k:报告T中是否存在key k。 delete k:删除key为 k 的节点。 打印:使用中序树遍…...
基于ceres优化的3d激光雷达开源算法
以下是一些基于CERES优化的开源激光雷达SLAM或相关算法: (1) LOAM (Lidar Odometry And Mapping) 简介: LOAM是一种经典的激光雷达里程计和建图算法,它通过提取特征点(角点和平面点),利用ICP(Iterative Cl…...
2023.9 Explainability for Large Language Models: A Survey
问题 可解释性问题:大语言模型(LLMs)内部机制不透明,难以理解其决策过程,如在自然语言处理任务中,不清楚模型如何根据输入生成特定的预测结果。模型评估问题:缺乏有效的评估指标和方法来衡量解…...
集成方案 | Docusign + 金蝶云,实现合同签署流程自动化!
本文将详细介绍 Docusign 与金蝶云的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在当今商业环境中,流程的无缝整合与数据的实时性对于企业的成功至关重要。金蝶云&…...
[LeetCode-Python版] 定长滑动窗口3——1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
题目 给你一个二进制字符串 s 和一个整数 k 。如果所有长度为 k 的二进制字符串都是 s 的子串,请返回 true ,否则请返回 false 。 示例 1: 输入:s “00110110”, k 2 输出:true 解释:长度为 2 的二进制…...
简单工厂模式和策略模式的异同
文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…...
Docker容器五种网络驱动模式详解
Docker 网络用于在容器之间以及容器与外部网络之间提供通信功能。它允许容器在隔离的网络环境中运行,同时也能根据需要与其他容器或外部网络进行交互。通过使用网络驱动,Docker 可以创建不同类型的网络,以满足各种应用场景的需求。 传统上&am…...
从客户跟进到库存管理:看板工具赋能新能源汽车销售
在新能源汽车市场日益扩张的今天,门店销售管理变得更加复杂和重要。从跟踪客户线索到优化订单流程,再到团队协作,效率低下常常成为许多门店的“隐形成本”。如果你曾为销售流程不畅、客户管理混乱而苦恼,那么一种简单直观的工具—…...
汽车IVI中控开发入门及进阶(41):视频播放器MPlayer
版本: MPlayer 1.5 2022年已发布。 MPlayer 1.5与最新FFmpeg版本(5.0)和当前FFmpeg开发版本(FFmpeg master)兼容。tarball已经包含一个FFmpeg快照,因此不需要单独获取它。如果想遵循MPlayer和FFmpeg的最新改进,强烈建议你使用开发版本。 MPlayer - The Movie Playerht…...
Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍
概述 伴随电子商务的持续演进,客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径,以强化自身运营,并优化购物体验。达成此目标的最为行之有效的方式之一,便是将 AI 呼叫助手融入您的电子商务平台。我们…...