XGBoost算法挺复杂的,要多读几遍论文,梳理算法思路。本文希望有助于理解这个算法。

 

0x01、XGBoost简介

XGBoost即 Extreme Gradient Boosting,极端梯度提升,或者叫极值梯度提升。XGBoost所应用的算法就是GBDT的改进,既可用于分类也可用于回归问题中。作为GBDT的高效实现,XGBoost是一个上限特别高的算法。

1、XGBoost与GBDT的比较

 XGBoost算法

GBDT算法 

基分类器使用CART回归树作为基分类器,还支持线性的基学习器。使用CART树作为基分类器
结点分类方法依据影响Loss的程度来确定连续特征的切分值使用基尼指数
损失函数使用了二阶泰勒展开,有利于梯度下降得更快更准确只用到一阶导数
防止过拟合在代价函数里加入了正则项用于控制模型复杂度,降低了过拟合的可能性无正则项,可能出现过拟合
模型实现

在训练之前预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,可以大大减少计算量。

能够实现在特征粒度的并行。

串行,不支持并行

2、XGBoost的优缺点

优点:速度快,效果好,能处理大规模数据,支持多种基学习器,支持自定义损失函数等;

缺点:算法参数过多,调参复杂,不适合处理超高维特征数据。

 

0x02、XGBoost的模型和框架

1、XGBoost的模型

(回归树)给定一个包含个样本,M 个特征的数据集 T=\left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\},集成模型的预测输出表示为:

        \hat{y}_i = \phi(x_i) = \sum_{k=1}^{K} f_k(x_i)  

其中,f_k 表示回归树,K 为回归树的数量。整个公式表示给定一个输入 x_i,输出值为 K 棵回归树的预测值相加。

2、XGBoost算法的基本框架

输入:训练数据集 T=\left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\}, ~x_i \in \chi \sqsubseteq R^n, ~ y_i \in \gamma \sqsubseteq R,最大迭代次数 T,损失函数 L正则化系数 \lambda\gamma

输出:强学习器 f_M(x) 。

对迭代轮数 m=1,2,...,M

(1)计算一阶二阶导:计算第 i 个样本(i=1,2,...N)在当前轮的损失函数 L 基于 f_{m-1}(x_i) 的一阶导数 g_{mi},二阶导数 h_{mi},并计算所有样本的一阶导数和  G_{t} = \sum _{i=1}^{N} g_{mi},二阶导数和  H_{t} = \sum _{i=1}^{N} h_{mi} ; 

(2)基于当前结点尝试分裂决策树,默认分数 score=0,G 和 H 为当前需要分裂的结点的一阶二阶导数之和,

         对特征序号 k=1,2,...,K

        a. 先将左子树的一阶二阶导数和均置为零:G_{L}=0H_{L}=0

        b. 将样本按特征 k 从小到大排序,依次取出第 i 个样本,依次计算当前样本放入左子树后,左右子树一阶二阶导数和为:

                G_{L} = G_{L} + g_{mi}, ~ G_{R}=G-G_{L}  

               H_{L}=H_{L}+h_{mi},~ H_{R}=H-H_{L}  

        c. 尝试更新最大的分数:

                 score = max ( score, \frac{1}{2} [\frac{G_{L}^{2}}{H_L + \lambda} + \frac{G_{R}^{2}}{H_R + \lambda} + \frac{(G_{L}+G_R)^2}{H_L +H_R + \lambda} ]- \gamma )   

(3)基于最大score对应的划分特征和特征值分裂子树;

(4)如果最大score为0,则当前决策树建立完毕,计算所有叶子区域的 w_{mj},得到弱学习器 h_m(x),更新强学习器 f_m(x),进入下一轮弱学习器迭代;如果最大score不为0,则转到第(2)步继续尝试分裂决策树。

XGBoost对GBDT的改进主要在目标函数(即损失函数和正则项)的改进上,例如向原损失函数中加入了正则项,使用了损失函数的二阶导数等,下面将详细分析这些改进点。

 

0x03、XGBoost的知识点分解

主要是在损失函数上的改进。

1、XGBoost损失函数推导

(1)XGBoost模型

        \hat{y}_i = \phi (x_i) = \sum_{k=1}^K f_k(x_i) ,F=\left\{ f_t(x) = w_{q(x)} \right\}, ~w \in R^T,~q:R^d \rightarrow \left\{ 1,2,...,T \right\}

其中 K 为树的总个数,f_k 表示第 k 棵树, \hat{y}_i 表示 样本 x_i 的预测结果;w为叶子结点的得分值,q(x)表示样本 x 对应的叶子结点,T为该树的叶子结点个数。

(2)XGBoost损失函数

        L(\phi ) = \sum_{i} l(\hat{y}_i, y_i) + \sum_{k} \Omega (f_k) ,\Omega (f) = \gamma T + \frac{1}{2} \lambda||w||^2  ,

其中 l(y_i,\hat{y}_i) 为样本 x_i 的训练误差,表示模型拟合数据的程度,\Omega (f_k) 表示第 k 棵树的正则项,用来惩罚复杂模型。

(3)XGBoost目标函数的改写过程

使用前向分步算法优化目标函数。设 \hat{y}_{i}^{(t)} 是第 i 个样本在第 t 次迭代的预测值,则有:\hat{y}_{i}^{(t)} = \hat{y}_{i}^{(t-1)} + t_{t}(x_i) ,表示样本 i 在第 t次迭代后的预测值为样本 i 在第 (t-1) 次迭代后的预测值与当前第t棵树的预测值的和。因此目标函数可以表示为:

        L^{(t)} = \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t)} ) + \sum_{i}^{t} \Omega (f_i) \\ ~~~~~~~~~~= \sum_{i=1}^{n} l \left\(y_i, ~\hat{y}_i^{(t-1)}+f_t(x_i) \right\) + \Omega(f_t) + constant     (3-1)   

上式表示贪心地添加使得模型提升最大  ,其中 constant表示前t (t-1) 次迭代的惩罚项,是一个常数项,即公式中  \sum_{i}^{t} \Omega (f_i)  部分。在第 t 次迭代时,前 (t-1) 次迭代产生的 (t-1) 棵树已经完全确定,则 (t-1) 棵树的叶结点和权重都已经确定,所以变成了常数。

如果在式(3-1)中考虑平方损失函数,则目标函数可以表示为:

        L^{(t)} = \sum_{i=1}^{n} \left\( y_i - (\hat{y}_i^{(t-1)} + f_t(x_i)) \right\)^2 + \Omega(f_t) + constant \\ ~~~~~~~~~~ = \sum_{i=1}^{n} \left\(y_i - \hat{y}_{i}^{(t-1)} - f_t(x_i) \right\)^2 + \Omega(f_t) + constant     (3-2)  

上式中,y_i - \hat{y}_{i}^{(t-1)} 表示残差,即经过 (t-1) 棵树的预测之后与真实值之间的差距,与GBDT中的残差概念相同。

定义 g_ih_i 分别为损失函数 l(y_i, \hat{y}^{(t-1)}) 的一阶导和二阶导,即: g_i = \partial _{\hat{y}^{(t-1)}} l(y_i, \hat{y}^{(t-1)}) , h_i = \partial _{\hat{y}^{(t-1)}}^2 l(y_i, \hat{y}^{(t-1)})  。而 l(y_i, \hat{y}^{(t-1)}) 表示的是前 (t-1) 次迭代的损失函数,对当前的第 t 次迭代来说已经是一个确定的常数了,可以省略。因此使用二阶泰勒展开式近似表示式(3-1)为:

        L^{(t)} \approx \sum_{i=1}^{n} \left\[ l(y_i, \hat{y}_i^{(t-1)}) + g_if_t(x_i) +0.5\cdot h_{i} f_{t}^{2}(x_i) \right\] + \Omega(f_t) + constant \\ ~~~~~~~~~~ = \sum_{i=1}^{n} \left\[ g_i f_t (x_i) + 0.5 \cdot h_i f_t^2(x_i) \right\] + \Omega(f_t)     (3-3)

接下来分析式(3-3)。首先定义集合  为树的第 j 个叶结点上的所有样本点的集合,即给定一棵树,所有按照决策规则被划分到第

j 个叶结点的样本集合,将复杂度惩罚项带入式(3-3),可得:

        L^{(t)} = \sum_{i=1}^{n} \left\[ g_i f_t (x_i) + 0.5 \cdot h_i f_t^2(x_i) \right\] + \Omega(f_t) \\ ~~~~~~~~~~ = \sum_{i=1}^{n} [ g_i f_t(x_i) + 0.5 \cdot h_i f_{t}^2(x_i) ] + \gamma T + \frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^2 \\ ~~~~~~~~~~ = \sum_{j=1}^{T} [ (\sum_{i \in I_j} g_i)w_j + \frac{1}{2}( \sum_{i \in I_j} h_i + \lambda) w_{j}^2 ] + \gamma T    (3-4) 

对上式求导,先令 \partial L^{(t)} / \partial w_j= 0,有:

        \frac{ \partial L^{(t)}}{ \partial w_j} = 0 \\ \Rightarrow (\sum_{i \in I_j} g_i) + (\sum_{i \in I_j} h_i + \lambda) w_j = 0 \\ \Rightarrow (\sum_{i \in I_j}h_i + \lambda )w_j = - \sum_{i \in I_j} g_i \\ \Rightarrow w_{j}^* = \frac{- \sum_{i \in I_j} g_i }{ \sum_{i \in I_j} h_i +\lambda}     (3-5) 

将式(3-5)代入式(3-4)中,得到:

       L^{(t)} = - \frac{1}{2} \sum_{j=1}^{T} \frac{ (\sum_{i \in I_j} g_i)^2}{ \sum_{i \in I_j} h_i + \lambda} + \gamma T    (3-6) 

令 G_i = \sum_{i \in I_j} g_i ,H_i = \sum_{i \in I_j} h_i  ,则将式(3-6)简化为: L^{(t)} = -\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^2}{H_j + \lambda } + \gamma T  (3-7) 。

XGBoost根据式(3-7)作为损失函数判断的标准。

2、树的分裂查找算法

(1)XGBoost的特征选择和切分点选择指标

判断切分增益:

      Gain = \frac{1}{2} [ \frac{G_{L}^2}{H_L + \lambda} + \frac{G_{R}^2}{H_R + \lambda} - \frac{(G_{L}+G_R)^2}{H_L + H_R + \lambda} ] - \gamma      (3-8)

中括号里的三个式子依次表示:某个结点按条件切分后左结点、右结点、和切分前的得分。\gamma 表示切分后模型复杂度的增加量。Gain值越大,说明分裂后能使目标函数减少越多,就越好。现在有了判断增益的方法,就需要使用该方法去查找最优特征和最优切分点。

(2)分裂查找算法

XGBoost提供了两个算法,用来选取最优特征和最优切分点:精确贪心算法(Basic Exact Greedy Algorithm),近似算法(Approximate Algorithm)。

 【精确贪心算法】通过遍历每个特征下的每个可能的切分点取值,计算切分后的增益,选择增益最大的特征及切分点。但因为精确贪心算法需要遍历所有特征和取值,当数据量非常大,无法将所有数据同时加载进内存时,该算法非常耗时。

【近似算法】对特征值进行了近似处理,即根据每个特征k的特征值分布,确定出候选切分点 S_k = \left\{ s_{k1}, s_{k2}, ..., s_{kl} \right\},即按特征分布将连续的特征值划分到 l 个候选点对应的桶中,并对每个桶中每个样本的 G_iH_i 进行累加。划分好候选切分点后,按照精确贪心算法的步骤选择最优切分特征和最优切分点,不同的是切分点被上述候选切分点所代替。

提取候选切分点的方式有两种:global和local。global表示在生成树之前进行候选切分点的提取,即开始之前为整棵树做一次提取即可,在每次的结点划分时都是用已经提取好的候选切分点。而local则是在每次结点划分时才进行候选切分点的提取。 global方式进行候选切分点提取的次数少:因为只是在初始化阶段进行一次,以后的结点切分均使用同一个,而local方式是在每次结点切分时才进行,需要很多次提取。global方式需要更多的候选点(对候选点提取数量比local多):因为没有像local方式一样每次结点划分时,对当前结点的样本进行细化,local方式更适合树深度较大的情况。

(3)加权分为数略图(Weighted Quantile Sketch)

这是为了处理带权重的候选切分点的选取。加权分位数略图算法提出一种支持merge和prune操作的数据结构。

加权分位数略图法对候选点的选取方式:

设数据集 D_k =\left\{ (x_{1k},h_1),(x_{2k},h_2),...,(x_{nk},h_n) \right\} 表示每个样本的第 k 个特征值(x_{nk})和二阶导数(h_{nk})的集合,定义排名函数 r_k

        r_k(z) = \frac{1}{\sum_{(x,h) \in D_k}h} \sum_{(x,h) \in D_k, x < z} h     (3-9)

上式表示数据集中第 k 个特征值小于z 的样本所在比例(特征值小于z的样本的权重和,占所有样本权重总和的百分比)。

可以根据下式进行候选点的选取:|r_k(s_k,j)-r_k(s_k,j+1)| < \epsilon,此式表示落在两个相邻的候选切分点之间的样本占比小于某个很小的常数 \epsilon 那么我们就有 1/\epsilon 个候选切分点。

3、其他优化方法

(1)稀疏值处理(Sparsity-aware Split Finding)

实际工程中一般会出现输入值稀疏的情况,如数据缺失、one-hot编码等。XGBoost的思想是:对于缺失数据让模型自动学习默认的划分方向。在该算法中,在每次切分中,让缺失值分别被切分到左、右结点中,通过计算得分值比较两种切分方法哪一个更优,则会对每个特征的缺失值都学到一个最优的默认切分方向。

(2)分块并行(Column Block for Parallel Learning)

在树生成过程中,需要花费大量的时间在特征选择和切分点选择上,并且这部分时间大部分又花费在对特征值排序上。XGBoost通过按特征进行分块并排序,在块里保存排序后的特征值及对应样本的引用,以便于获取样本的一阶二阶导数值。通过顺序访问排序后的块遍历样本特征的特征值,方便进行切分点的查找。分块存储后多个特征之间互不干涉,可以使用多线程同时对不同的特征进行切分点查找,即特征的并行化处理。

但在顺序访问特征值时,访问的是一块连续的内存空间,但通过特征值持有的索引(样本索引)访问样本获取一阶二阶导数时,这个访问操作访问的内存空间并不连续,这样可能造成CPU缓存命中率低,影响算法效率。有以下几种方法解决:

    (a)缓存访问(Cache-aware Access):为了减小非连续内存的访问带来缓存命中率低的问题。解决思路是:既然是非连续内存访问带来问题,那么去掉非连续内存访问就可以解决。可以转非连续为连续——缓存预取,即提起将要访问的非连续内存空间中的梯度统计信息(一节二阶导数),放置到连续的内存空间中。具体的操作就是为每个线程在内存空间中分配一个连续的buffer缓存区,将需要的梯度统计信息存放到缓冲区中。这种方式对大数据量很有用,可以不用把所有样本都加入的内存中,仅动态地将相关信息加入到内存中。

    (b)“核外”块计算(Blocks for Out-of-core-Computation):当数据量非常大时不能把所有的样本都加载到内存中,那么必须将一部分需要加载进内存的数据先存放在硬盘中。需要时再加载进内存。但硬盘的I/O操作速度远远低于内存的速度,那么会存在大量等待硬盘I/O的情况。针对这个问题,“核外”计算的操作为:将数据集分成多个块存放在硬盘中,使用一个独立的线程专门从硬盘读取数据加载到内存中,这样算法在内存中处理数据就可以和从硬盘读取数据同时进行。论文提出两种方法:块压缩(Block Compression)和块分区(Block Sharding)。前者是按列压缩,读取的时候用另外的线程解压,对行索引只保存第一个索引值,然后用16位的整数保存与该block第一个索引的差值。后者是将特征block分区存放在不同的硬盘上,以此来增加硬盘I/O的吞吐量。

(3)防止过拟合

XGBoost为了防止过拟合加入了两项惩罚项 \gamma T 和  (1/2)\lambda ||w||^2 。除此之外还可以用学习率行列采样的方法防止过拟合:例如 \hat{y}^{(t)} = \hat{y}_{i}^{(t-1)} + \eta f_t(x_i) 中,\eta 就是学习率;而XGBoost也和随机森林一样支持对样本及特征进行采样,取采样后的样本和特征作为训练数据,进一步防止过拟合。

 

 

参考:

[1]. 李航. 统计学习方法(第二版)

[2]. 周志华. 机器学习

[3]. 陈天奇. XGBoost: A Scalable Tree Boosting System. SIGKDD 2016

[4]. 集成学习之Xgboost - 博客园

[5]. 机器学习算法之XGBoost - 标点符

[6]. 对xgboost的理解 -知乎

[7]. XGBoost算法原理小结 - 博客园

[8]. xgboost - github

[9]. XGBoost调参详解 - 知乎

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 浅谈Python语法中的迭代器与生成器

    一、迭代器迭代器有两个基本的方法:iter() 和 next(),“迭代器是Python最优良的特性之一”之前一直理解不了这句话,因为说这句话的人,解释的时候通常是拿迭代器和for循环做比较,一起计算同一个循环,如下所示:>>> list=[1,2,3,4]>>> it = iter(list) …...

    2024/4/11 16:42:00
  2. 单链表相关习题

    1. 求单链表中有效节点的个数 2. 查找单链表中倒数第k个节点 3. 单链表的反转 4. 从尾到头打印单链表1. 求单链表中有效节点的个数 设置一个临时变量来当作计数器。然后对整个链表进行遍历来数出有效节点的个数。public int getLength() {int length = 0;Student temp = head;w…...

    2024/4/27 22:12:14
  3. vue滚动到对应的元素位置

    1.使用a标签+#号 <a href="#box1">我跳到box1</a> <div id="box2"></div>上面这一种的缺点是,url会发生改变,会在url最后面加上片段识别符#box2,这样就改变了URL的路径,这是我们不想看到的。因为再次刷新的时候回出现问题。当…...

    2024/4/26 5:09:16
  4. 36-1 JavaScript高级 面向对象 类面向对象tab栏切换删除添加编辑

    1.面向对象面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。2.对象与类 对象是由属性和方法组成的:是一个无序键值对的集合,指的是一个具体的事物属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词)2.1…...

    2024/4/29 16:46:09
  5. 机器学习模型基本参数调整方法

    注:本文主要方便自己查阅,如有问题欢迎留言模型默认的参数有时并不是最优的参数,为了寻找最优的参数,在这里使用RandomizedSearchCV和GridSearchCV.1 RandomizedSearchCVRandomizedSearchCV函数可以帮助我们在候选集组合中,不断的随机选择一组合适的参数来建模,并且求其…...

    2024/4/11 16:41:57
  6. 南邮-云计算技术与大数据期末考试(知识点总结)

    一、云计算技术概述 1、云计算起源与技术特征 1.1 云计算的定义 ●云计算是具备动态资源池的、虚拟化和高可用计算平台借用量子物理的“电子云”(Electron Cloud)概念,强调说明信息处理的弥漫性、无所不在的分布性特征 ●计算任务分布在大量计算节点构成的资源池上,各种应用系…...

    2024/4/25 16:33:11
  7. 永磁电机控制电路设计1

    1.DSP供电(芯片-TPS767D301)DSP双电源供电:dsp28335需要有5V和3.3V两种电源供电。内核供电3.3V,系统供电5V。因为dsp对功耗有着严格的要求,对实时性、处理数据的速度都要求高,故其速度为运算速度快、功耗低。其中时钟核心电压为3.3V。IO电压为5V。另外,板子上有多个电源引脚…...

    2024/4/26 12:32:54
  8. centos 安装Selenium+Chrome

    centos 安装Selenium+Chrome 参照https://cuiqingcai.com/4886.html 安装yum源 [root@spider01 ~]# sudo yum install -y epel-release 安装Chrome [root@spider01 ~]# yum install -y chromium 去这个地方:https://sites.google.com/a/chromium.org/chromedriver/downloads 下…...

    2024/5/2 9:29:03
  9. 假设检验中原假设和备择假设的选取问题

    原假设和备择假设互换的问题假设检验原理如何确立原假设扩展资料 原假设和备择假设互换的问题 假设检验时,将原假设和备择假设互换,有时候会产生完全相反的结果。例如下面这题,如果令H0 :u>225,H1:u≤225,检验时t的值落在接受域,即认为元件的平均寿命大于225h。在同样…...

    2024/4/11 16:41:52
  10. Spring Cloud Config 配置中心使用说明(2) -- 服务器+git库

    spring cloud config 服务器提供了基于HTTP 的外部配置(名称值对或等效的YAML内容)资源API 。服务器可以使用@EnableConfigServer注释轻松嵌入到Spring Boot应用程序中。所以下面这个应用程序是一个配置服务器: ConfigServer.java @SpringBootApplication @EnableConfigServ…...

    2024/4/26 4:35:52
  11. OpenShift 4 - 设置集群节点和Pod容器的时间和时区

    文章目录OpenShift的时间和时区节点和容器的时间节点和容器的时区节点时间同步准备MachineConfig配置文件在安装OpenShift集群过程中同步节点时间在安装OpenShift集群过程后同步节点时间设置时区设置集群节点时区设置容器时区参考 OpenShift的时间和时区 在OpenShift集群中,节…...

    2024/4/27 9:41:26
  12. 基于SpringBoot微信点餐系统与分布式锁的实现(附源码)

    架构前后端分离:补充:setting.xml 文件的作用:settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。maven的作用:借助Maven,可将jar包仅仅保存在“仓库”中,有需要该文件时…...

    2024/4/12 22:09:52
  13. 占PC市场四成份额,联想是怎样“圈定”年轻人的?

    文 | 曾响铃来源 | 科技向令说(xiangling0815)最近,很多人因为追《乐队的夏天》导致自己在这个夏天特别忙,需要不停地给自己喜欢的乐队打投。因此,《乐队的夏天》也被不少网友调侃为“捞人的夏天”。如果《乐队的夏天》里的人气乐队现身线下,会带来怎样的盛景?近日,古城…...

    2024/4/11 16:21:34
  14. RISC-V E300 SOC架构介绍——1.总体介绍

    0.基于RISC-V SOC平台的总体介绍: E300平台是SiFive公司Freedom Everywhere系列的第一个可定制的RISC-V SoC。 E300 SoC包括一个SiFive系列 RISC-V Coreplex核,并且集成了指令和数据存储器,一个系统中断控制器(PLIC),片上debug单元,及一个可扩展选择的外设。 系统可以扩展…...

    2024/5/2 1:21:24
  15. 如何计算DOM树的深度?

    1、什么是DOM( Document Object Model(文档对象模型)) W3C DOM 标准被分为 3 个不同的部分:核心 DOM - 针对任何结构化文档的标准模型 XML DOM - 针对 XML 文档的标准模型 HTML DOM - 针对 HTML 文档的标准模型什么是HTML DOM?HTML 的标准对象模型 HTML 的标准编程接口 W3C…...

    2024/4/16 12:41:38
  16. 基于张量的多元多阶马尔科夫多模态预测方法

    本博客整理自研读的论文,文末会附上出处。 基于张量的多元多阶马尔科夫多模态预测方法一.问题背景二.多元多阶马尔科夫模型1.张量连接和张量统一乘2.多元多阶马尔科夫转移模型3.多元多阶马尔科夫多步转移模型三.多元多阶马尔科夫稳态联合主特征张量四.多元多阶马尔科夫多模态预…...

    2024/5/3 12:18:49
  17. PVE shell: “connect: Network is unreachable”

    刚安装的PVE,无法ping外网ip,也无法使用apt-get安装软件 解决办法如下:命令行输入: ip route show 输出: 192.168.1.0/24 dev vmbr0 proto kernel scope link src 192.168.1.2 命令行输入: ip route add default via 192.168.1.3 dev vmbr0(这里192.168.1.3是ROS的地址)…...

    2024/5/2 6:52:24
  18. CentOS中,外网无法通过宿主机IP+端口访问DOCKER容器的解决办法

    问题表现CentOS中开启的服务,外网可以正常访问。 DOCKER容器开启的服务,CentOS内部可以访问。 CentOS的IP,外网可以正常PING通。 外网无法访问DOCKER容器内部。原因CentOS防火墙的原因,需要允许NAT转发。解决办法允许NAT转发firewall-cmd --zone=public --add-masquerade -…...

    2024/4/11 16:21:27
  19. react-native环境搭建注意事项

    注意:此为个人经验,请依据自身项目情况,酌情参考 请严格参照react-native中文网的搭建开发环境文档进行操作。安装Java的jdk并配置相关环境变量。安装Android-studio,安装时会自动安装安卓开发所需的sdk。以上依据文档要求,下载相应版本,并配置好后,我们来初始化react-n…...

    2024/4/23 5:13:32
  20. zigbee菜鸟笔记(九)无线通信.RSSI链路质量监测

    一.RSSI的概念 RSSI :Received Signal Strength Indication 接收信号强度指示,用来判定链质量,以及是否 增大无线信号发送强度。...

    2024/4/11 16:21:26

最新文章

  1. 每日OJ题_DFS解决FloodFill⑥_力扣529. 扫雷游戏

    目录 力扣529. 扫雷游戏 解析代码 力扣529. 扫雷游戏 529. 扫雷游戏 难度 中等 让我们一起来玩扫雷游戏&#xff01; 给你一个大小为 m x n 二维字符矩阵 board &#xff0c;表示扫雷游戏的盘面&#xff0c;其中&#xff1a; M 代表一个 未挖出的 地雷&#xff0c;E 代表…...

    2024/5/7 8:53:14
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 为什么pdf拆分出几页之后大小几乎没有变化

    PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因&#xff1a; 图像压缩: 如果 PDF 文件中包含图像&#xff0c;而这些图像已经被压缩过&#xff0c;拆分后的页面依然会保留这些压缩设置&#xff0c;因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…...

    2024/5/4 5:48:17
  4. 整理的微信小程序日历(单选/多选/筛选)

    一、日历横向多选&#xff0c;支持单日、双日、三日、工作日等选择 效果图 wxml文件 <view class"calendar"><view class"section"><view class"title flex-box"><button bindtap"past">上一页</button&…...

    2024/5/5 8:50:30
  5. 【C++】C++中的list

    一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…...

    2024/5/5 8:49:36
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/6 18:23:10
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/6 18:40:38
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/6 23:37:19
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/6 7:24:07
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/7 0:32:52
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/6 7:24:06
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/6 20:04:22
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/7 0:32:51
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/6 19:38:16
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/7 0:32:49
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/6 21:25:34
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/6 7:24:02
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/7 7:26:29
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/7 0:32:47
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/6 16:50:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57