机器学习与深度学习14-集成学习
目录
- 前文回顾
- 1.集成学习的定义
- 2.集成学习中的多样性
- 3.集成学习中的Bagging和Boosting
- 4.集成学习中常见的基本算法
- 5.什么是随机森林
- 6.AdaBoost算法的工作原理
- 7.如何选择集成学习中的基础学习器或弱分类器
- 8.集成学习中常见的组合策略
- 9.集成学习中袋外误差和交叉验证的作用
- 10.集成学习的优势和局限性
前文回顾
上一篇文章链接:地址
1.集成学习的定义
集成学习(Ensemble Learning)是一种机器学习方法,其基本思想是通过组合多个学习算法或模型的预测来提高整体性能和泛化能力。它的核心思想是通过汇总多个模型的意见,以减小单个模型的偏差和方差,从而提高模型的鲁棒性和准确性。集成学习背后的基本思想包括:
- 组合多个模型:集成学习通过同时使用多个不同的学习算法或同一算法的不同设置来创建多个基本模型,这些模型通常被称为“弱学习器”
- 多样性和独立性:为了确保集成模型的多样性,这些基本模型通常是在不同的子样本或特征子集上训练的,以捕获不同方面的模式。多样性和独立性是集成学习成功的关键因素
- 投票或加权平均:一旦生成了这些基本模型,集成学习使用不同的策略来组合它们的预测结果。对于分类问题,可以采用多数投票来决定最终的分类结果;对于回归问题,可以采用加权平均来获得最终的预测值
- 性能提升:通过组合多个模型,集成学习旨在提高整体性能,减少模型的过拟合风险,以便在新数据上更好地泛化
下面,咱们通过一个实际案例(股票价格预测)来说明集成学习的应用:
案例:假设你是一位股票投资者,希望使用机器学习来预测某支股票的未来价格走势。你决定应用集成学习方法来提高预测的准确性。以下是如何应用集成学习的步骤:
- 数据收集:收集了大量与该股票相关的数据,包括历史股价、成交量、市场指数、公司财务数据等
- 基本模型选择:选择了几种不同的时间序列预测模型,如ARIMA、Prophet和神经网络,作为基本模型
- 数据随机化:为确保基本模型的多样性,对数据进行随机化和分割,以确保每个模型使用不同的训练数据子集
- 模型训练:每个基本模型使用其分配的数据子集进行训练,以学习如何预测股票价格
- 预测集成:一旦基本模型训练完成,将来自所有模型的预测结果进行集成。可以采用加权平均的方法,其中更有经验的模型可能会被赋予更大的权重
- 性能评估:使用历史数据中的验证集来评估集成模型的性能,以确定其对未来股价走势的预测准确性
通过这种方式,你利用了不同模型的多样性和独立性,提高了股票价格预测的准确性,从而更好地指导你的投资决策。这是集成学习在实际股票价格预测中的一个例子
2.集成学习中的多样性
在集成学习中,“多样性”(Diversity)是指集成模型中的基本模型(弱学习器)之间的差异和多样性。多样性对于集成模型的性能至关重要,因为它在以下几个方面产生了积极的影响:
- 降低过拟合风险:多样性有助于减小集成模型的方差,这意味着模型在训练数据上的性能不会过于敏感,减少了过拟合的可能性。如果所有基本模型都过于相似,它们可能会在训练数据上都表现得很好,但在新数据上的泛化性能可能会很差。多样性可以减轻这种情况
- 增加鲁棒性:多样性可以使集成模型更具鲁棒性,即使其中一些基本模型出现错误或者不适用于特定数据分布,其他模型仍然可以提供有用的信息。这种鲁棒性对于处理噪声数据或异常情况非常重要
- 提高整体性能:多样性有助于集成模型捕获数据中不同方面的模式和信息。如果基本模型之间存在多样性,集成模型能够更全面地考虑不同模型的预测结果,从而提高了整体性能
- 减小估计偏差:集成学习的一个关键思想是减小估计偏差,多样性可以增加模型之间的差异,从而减小集成模型的偏差。这意味着集成模型更有可能适应数据的真实模式,而不是受到单个模型的限制
实现多样性的方法包括:
- 使用不同的基本模型:选择不同种类的机器学习算法或模型,以确保它们的学习方式不同
- 数据随机化:对训练数据进行随机子采样或引入噪声,以使每个基本模型训练的数据略有不同
- 特征选择:对特征进行不同的选择或排除,以使基本模型使用的特征集有所不同
- 参数调整:对每个基本模型使用不同的超参数设置,以使它们学习的模型有所不同
总之,多样性是集成学习的关键概念之一,它通过引入差异性和独立性来提高集成模型的性能和鲁棒性,使其能够更好地应对不同类型的数据和问题。多样性有助于减少过拟合风险,提高泛化能力,从而使集成模型更强大
3.集成学习中的Bagging和Boosting
Bagging(Bootstrap Aggregating)
- 工作原理:Bagging通过随机有放回地从训练数据集中抽取多个子样本(Bootstrap样本),然后使用这些子样本来训练多个基本模型,每个基本模型都是在不同的数据子集上训练的
- 模型训练:每个基本模型都独立地学习训练数据的不同子集,因此它们之间相对独立,可以并行训练。这些模型通常使用相同的学习算法
- 集成策略:Bagging的集成策略是通过平均(对于回归问题)或投票(对于分类问题)来集成基本模型的预测结果,以获得最终的集成模型
Boosting
- 工作原理:Boosting通过迭代地训练一系列基本模型,每个基本模型都试图修正前一个模型的错误。它会给每个样本分配一个权重,使前一个模型错误分类的样本在下一轮训练中获得更高的权重
- 模型训练:Boosting的基本模型是依次训练的,每个模型都在前一个模型的基础上进行学习,尝试减小前一个模型的错误
- 集成策略:Boosting的集成策略是通过加权平均基本模型的预测结果来获得最终的集成模型。权重通常是根据模型性能分配的,性能更好的模型通常有更高的权重
区别示例
假设有一个二分类问题,我们正在使用决策树作为基本模型,进行Bagging和Boosting的对比:
Bagging示例:
- Bagging首先随机抽取多个Bootstrap样本,每个样本都包含一部分训练数据
- 然后,针对每个Bootstrap样本,独立地训练一个决策树模型
- 最后,Bagging将所有决策树的预测结果进行投票,以决定最终的分类结果。
Boosting示例:
- Boosting首先使用原始训练数据训练一个决策树模型
- 然后,根据第一个模型的错误分类情况,调整训练数据中的样本权重,将更多关注被错误分类的样本
- 接下来,使用调整后的数据训练第二个决策树模型,试图修正第一个模型的错误
- 迭代这个过程,依次训练更多的模型,每个模型都试图修正前一个模型的错误
- 最终,Boosting将所有模型的预测结果进行加权平均,得到最终的分类结果
总之,Bagging的基本思想是通过并行训练多个相对独立的基本模型,然后将它们的预测结果平均化,以减小方差;而Boosting的基本思想是通过迭代训练一系列基本模型,每个模型都试图纠正前一个模型的错误,以提高整体性能。Boosting通常在模型性能上更强大,但也更容易过拟合
4.集成学习中常见的基本算法
集成学习中有许多常见的基本算法,每个算法都有其特定的方式来组合多个模型或学习器的预测结果。以下是一些常见的集成学习算法:
- Bagging(Bootstrap Aggregating):Bagging通过对训练数据集进行有放回的随机抽样来创建多个子样本,然后使用这些子样本来训练多个基本模型。最终的预测结果是通过对这些模型的预测结果进行平均(回归问题)或投票(分类问题)得到。随机森林就是Bagging的一个典型应用,它使用决策树作为基本模型
- Random Forest:随机森林是一种基于Bagging的集成学习算法,它使用多个决策树作为基本模型,并且在每个决策树的训练过程中引入了随机性。随机森林的特点是能够降低过拟合风险,同时保持较高的预测性能
- AdaBoost(Adaptive Boosting):AdaBoost是一种Boosting算法,它通过迭代地训练多个弱学习器,每个学习器试图纠正前一个学习器的错误。在每轮迭代中,AdaBoost会增加错误分类样本的权重,以使下一个学习器更关注这些样本。最终,通过对这些弱学习器的加权组合,得到一个强学习器
- Gradient Boosting:Gradient Boosting也是一种Boosting算法,但它通过梯度下降的方式来迭代地训练多个基本模型。在每一轮迭代中,Gradient Boosting试图拟合上一轮的残差(误差的负梯度),从而逐渐改进模型的性能。XGBoost、LightGBM和CatBoost是Gradient Boosting的改进版本,它们在性能和效率上都有显著提升
- Stacking:Stacking是一种元集成学习方法,它不仅使用多个基本模型,还包括一个元模型,用于组合基本模型的预测结果。基本模型的预测结果作为元模型的输入,元模型通过学习如何组合这些结果来产生最终的预测。Stacking通常需要更复杂的模型组织和训练过程
- Voting:Voting是一种简单而有效的集成策略,用于分类问题。它可以是硬投票(基于多数票)或软投票(基于预测的概率值)。Voting集成将多个基本模型的预测结果结合起来,以选择最终的分类标签
这些是集成学习中的一些常见基本算法,它们在不同的情境和问题中都有广泛的应用。选择适当的集成算法通常取决于数据的特性和问题的性质,以及在实践中的性能表现
5.什么是随机森林
随机森林(Random Forest)是一种集成学习方法,用于解决分类和回归问题。它由多个决策树组成,每个决策树都是独立训练的,并通过投票或平均预测结果来进行最终预测,随机森林的工作原理为
- 数据集的随机抽样:从原始数据集中随机选择一个子集(有放回地抽取),这称为自助采样(bootstrap
sampling)。这样做可生成多个不同的训练数据子集 - 构建决策树:对于每个子集,使用决策树算法构建一个独立的决策树模型。决策树通过递归地将数据集分割为更小的子集,并根据特征的值进行判断。特征的选择过程在每个节点上是随机的
- 集成预测:当要进行预测时,将测试样本输入到每个决策树中,得到各自的预测结果。最后,根据投票(分类问题)或平均(回归问题)的方式来确定最终的预测结果
随机森林可以有效地处理过拟合问题,具体方法
- 自助采样(Bootstrap Sampling):通过自助采样,随机森林能够生成多个不同的训练数据子集。这种重复抽样的过程可以减少模型对于特定数据的敏感性,从而减小过拟合的风险
- 随机特征选择:在每个决策树的节点划分时,随机森林只考虑一个随机选择的特征子集。这样做有助于减少特征之间的相关性,并避免某些特征对结果的过度依赖
- 多个模型的平均:随机森林采用多个决策树进行集成预测。通过对各个决策树的预测结果进行投票或平均,可以减少单个决策树带来的噪声和错误,提高整体的泛化能力
这些技术共同作用使得随机森林具有较好的鲁棒性和泛化能力,能够有效地处理过拟合问题
6.AdaBoost算法的工作原理
AdaBoost(Adaptive Boosting)是一种集成学习方法,旨在通过组合多个弱分类器来提高整体性能。它的基本原理是通过逐步改进训练样本的权重分布,使得难以分类的样本逐渐得到更多的关注,下面是AdaBoost算法的基本原理:
- 初始化样本权重:开始时,将每个训练样本的权重初始化为相等值,通常为1/n,其中n是样本数量
- 迭代训练弱分类器:对于每次迭代,AdaBoost选择一个弱分类器并进行训练。弱分类器的选择通常基于其分类误差率,即它在当前样本权重下的分类准确度。分类误差率较低的弱分类器将具有更大的权重
- 更新样本权重:根据弱分类器的分类结果,更新每个训练样本的权重。被错误分类的样本将获得更高的权重,而正确分类的样本则获得较低的权重。这样一来,被错误分类的样本将在后续的迭代中得到更多的关注
- 组合弱分类器:根据弱分类器的分类准确度,给予每个弱分类器一个权重。分类准确度较高的弱分类器将获得更高的权重
- 集成强分类器:将所有加权的弱分类器组合成一个强分类器。在预测过程中,每个弱分类器的输出结果会根据其权重进行加权求和,得到最终的预测结果
通过这种迭代的方式,AdaBoost能够逐步提高整体分类准确度。它善于处理复杂问题,尤其适用于二元分类任务。弱分类器可以是任何具有略优于随机猜测性能的分类器,如决策树桩(仅有一个分裂节点的决策树)
7.如何选择集成学习中的基础学习器或弱分类器
在集成学习中选择合适的基础学习器或弱分类器是关键的一步,以下是一些常用的方法:
- 选择不同类型的基础学习器:基础学习器可以来自不同的算法家族,如决策树、支持向量机、神经网络等。通过选择不同类型的基础学习器,可以从不同的角度对数据进行建模,增加集成模型的多样性
- 选择低偏差、高方差的基础学习器:在集成学习中,弱分类器通常应具有低偏差和高方差。这意味着它们能够灵活地适应训练数据,但可能会过拟合。例如,决策树桩就是一种常用的低复杂度、高方差的弱分类器
- 迭代选择弱分类器:AdaBoost等迭代式集成学习方法会在每次迭代中选择表现较好的弱分类器。这些方法会根据当前样本的权重分布来调整弱分类器的选择,使得难以分类的样本能够得到更多关注
- 通过交叉验证进行评估:使用交叉验证来评估不同基础学习器的性能。通过比较它们在不同子训练集上的表现,选择性能最好的基础学习器
需要注意的是,并没有一种通用的方法可以适用于所有问题,选择合适的基础学习器需要根据具体情况进行调整和尝试
8.集成学习中常见的组合策略
集成学习模型通过组合多个基础学习器的输出来进行预测。下面是一些常见的组合策略:
- 简单投票(Majority Voting):对于分类问题,简单投票是一种常用的组合策略。每个基础学习器对样本进行分类,预测标签为多数投票的类别。这种方法适用于二元分类和多分类问题
- 加权投票(Weighted Voting):与简单投票类似,但是每个基础学习器可以有不同的权重,根据其性能或置信度来决定权重。较可靠的基础学习器将被赋予更高的权重
- 平均(Averaging):对于回归问题,基础学习器的输出是连续值,可以计算多个基础学习器的平均值作为最终的预测结果。平均方法也适用于概率预测,即计算多个基础学习器输出概率的平均
- 加权平均(Weighted Averaging):与加权投票类似,在平均方法中,每个基础学习器也可以有不同的权重,根据其性能或置信度来分配权重
- 软投票(Soft Voting):对于基础学习器输出的概率值,可以使用软投票方法进行组合。对每个类别的概率进行平均或加权平均,然后选取最高概率对应的类别作为最终预测结果
- 堆叠(Stacking):堆叠是一种更复杂的组合策略,它将多个基础学习器的输出作为新的训练数据输入给另一个模型(称为元学习器或组合模型)。元学习器使用这些基础学习器的输出来进行进一步的预测。堆叠可以通过交叉验证来选择最佳的组合方式
这些组合策略可以根据问题的性质和基础学习器的特点进行选择和调整。需要注意的是,组合策略的选择也可能因不同的集成学习算法而异
9.集成学习中袋外误差和交叉验证的作用
袋外误差(Out-of-Bag Error)和交叉验证(Cross-Validation)是用于评估集成学习模型性能和选择最佳参数的重要工具
- 袋外误差:在基于自助采样(Bootstrap)的集成学习方法中,每个基础学习器在构建过程中只使用了部分训练样本。因此,未被选中的样本可以用于评估模型性能,这些样本称为袋外样本。袋外误差衡量了模型在未见过的样本上的预测能力。通过计算基础学习器在袋外样本上的误差平均值,可以得到整个集成模型的袋外误差估计。袋外误差提供了一种无偏估计集成模型的泛化性能的方法,可以帮助评估模型的准确度
- 交叉验证:交叉验证是一种常用的模型选择和参数调优方法,可用于选择最佳的基础学习器、确定集成模型的规模或权重等。它包括将训练数据集划分为多个互斥的子集(通常称为折),然后在其中一部分作为验证集,其余部分作为训练集。重复进行交叉验证,并评估模型在各个验证集上的性能。最常用的交叉验证方法是k折交叉验证,其中将数据集划分为k个子集,每次选择一个作为验证集,剩余k-1个作为训练集。通过对各个验证集的性能进行平均或加权平均,可以得到对模型性能的估计。交叉验证可以帮助选择最佳的基础学习器、调整模型参数、评估模型性能,并避免了对单个训练/验证集的过度依赖
袋外误差和交叉验证都是集成学习中常用的评估手段,它们提供了一种无偏估计模型性能的方法,有助于选择合适的模型和优化集成模型的参数
10.集成学习的优势和局限性
集成学习在许多领域和任务中都表现出色,特别适用于以下情况:
- 分类问题:集成学习在分类问题中表现出色,尤其是在处理复杂的、高维度的数据集时。它能够通过组合多个弱分类器来提高整体分类准确度
- 大规模数据集:当有大量数据可用时,集成学习能够有效地利用这些数据,从而提高模型的泛化性能
- 不平衡数据集:当数据集中的类别分布不均衡时,集成学习可以通过调整样本权重或基础学习器的权重来处理这种情况,并提高少数类别的分类准确度
- 噪声数据:集成学习对于噪声数据具有鲁棒性,通过组合多个基础学习器的输出,可以降低噪声对最终预测结果的影响
然而,集成学习也有一些局限性:
- 训练时间:由于需要构建和训练多个基础学习器,集成学习的训练时间通常比单个基础学习器更长
- 内存消耗:将多个基础学习器组合成集成模型需要占用更多的内存空间
- 解释性:当集成模型的复杂度增加时,模型的解释性会降低。这是由于集成模型通常由多个基础学习器组成,并且其预测结果可能更难以解释
- 高度依赖基础学习器:集成学习的性能取决于所选择的基础学习器。如果基础学习器性能较差,整个集成模型的性能可能无法达到期望
- 过拟合风险:在构建过程中,集成学习可能面临过拟合问题。当集成模型过于复杂或基础学习器过度拟合训练数据时,模型在未见过的数据上的泛化性能可能下降
尽管存在一些局限性,但集成学习仍然是一种强大的机器学习技术,在很多实际应用中取得了显著的成功
相关文章:
机器学习与深度学习14-集成学习
目录 前文回顾1.集成学习的定义2.集成学习中的多样性3.集成学习中的Bagging和Boosting4.集成学习中常见的基本算法5.什么是随机森林6.AdaBoost算法的工作原理7.如何选择集成学习中的基础学习器或弱分类器8.集成学习中常见的组合策略9.集成学习中袋外误差和交叉验证的作用10.集成…...
MySQL数据库表设计与索引优化终极指南
MySQL数据库表设计与索引优化终极指南 标签:MySQL 数据库设计 索引优化 性能调优 一、前言:为什么表设计和索引如此重要? 在数据库系统中,良好的表设计和高效的索引策略是保证系统性能的关键。据统计,约70%的数据库性…...

【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码
摘要 在多智能体强化学习(MARL)中,通常采用参数共享来提高样本效率。然而,全参数共享的流行方法通常会导致智能体之间的策略同质,这可能会限制从策略多样性中获得的性能优势。为了解决这一关键限制,我们提出…...

负载均衡LB》》HAproxy
Ubuntu 22.04 安装HA-proxy 官网 资料 # 更新系统包列表: sudo apt update # 安装 HAproxy sudo apt install haproxy -y # 验证安装 haproxy -v # 如下图配置 Haproxy 在这里插入代码片》》》配置完之后 重启 Haproxy sudo systemctl restart haproxy 补充几…...
Vue 中组件命名与引用
Vue 中组件命名与引用 前言 在 vue 项目中,我们会发现在代码中,import 组件 和 components 组件注册中得命名方式与组件引用时的命名方式不一样,这种现象是由组件名的大小写转换规则造成的。如下示例: 组件引入与注册ÿ…...

UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
提问 UE5报错如图。解析原因 回答 你遇到的这个错误提示是: “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…...
在uni-app中如何从Options API迁移到Composition API?
uni-app 从 Options API 迁移到 Composition API 的详细指南 一、迁移前的准备 升级环境: 确保 HBuilderX 版本 ≥ 3.2.0项目 uni-app 版本 ≥ 3.0.0 了解 Composition API 基础: 响应式系统:ref、reactive生命周期钩子:onMount…...

Rust 控制流
文章目录 Rust 控制流if 表达式循环实现重复用 loop 重复代码从循环返回值循环标签用于区分多层循环while 条件循环用 for 循环遍历集合 Rust 控制流 在大多数编程语言中,根据条件是否为真来运行某些代码,以及在条件为真时重复运行某些代码,是…...
【Linux基础知识系列】第十三篇-Cron与定时任务管理
在Linux系统中,任务自动化是提高效率和确保服务连续性的关键。Cron是一个强大的定时任务管理工具,它允许用户设置定期执行的命令或脚本。通过Cron,用户可以自动化系统维护、备份、报告生成等多种任务。本文将详细介绍如何使用Cron工具创建和管…...
Visual Studio 中的 MD、MTD、MDD、MT 选项详解
在Visual Studio中开发C++项目时,正确选择运行时库(runtime library)对于确保应用程序的性能、稳定性和兼容性至关重要。本文将详细介绍/MD, /MT, /MDd, 和 /MTd这些编译器选项的意义、应用场景及其区别。 MSVCRT.dll MSVCRT.dll 是 Microsoft Visual C++ Runtime Library …...

Python 3.11.9 安装教程
前言 记录一下Windows环境下Python解释器的安装过程。 安装过程 1、安装程序下载 打开Python官网: 点击Downloads,选择Windows: 页面中找到需要的3.11.9版本,点击Download Windows installer (64-bit)下载: 2、…...

【各种主流消息队列(MQ)对比指南】
主流消息队列对比分析 一、核心指标对比 特性/消息队列RabbitMQKafkaRocketMQActiveMQPulsar协议支持AMQP, MQTT, STOMP自定义协议JMS/自定义协议JMS, AMQP, MQTT, STOMPMQTT, AMQP, STOMP单机吞吐量万级百万级十万级万级百万级延迟微秒级(低吞吐)毫秒…...

PySpark、Plotly全球重大地震数据挖掘交互式分析及动态可视化研究
全文链接:https://tecdat.cn/?p42455 分析师:Yapeng Zhao 在数字化防灾减灾的时代背景下,地震数据的深度解析成为公共安全领域的关键议题。作为数据科学工作者,我们始终致力于通过技术整合提升灾害数据的应用价值(点击…...
代码训练LeetCode(24)数组乘积
代码训练(24)LeetCode之数组乘积 Author: Once Day Date: 2025年6月5日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 238. 除自身以外数组的乘积 - 力扣(LeetCode)力扣 (LeetCode) 全…...

如何让AI自己检查全文?使用OCR和LLM实现自动“全文校订”(可DIY校订规则)
详细流程及描述参见仓库(如果有用的话,请给个收藏): GitHub - xurongtang/DocRevision_Proj: A simple project about how to revist docment (such as your academic paper) in a automatic way with the help of OCR and LLM.A…...
volka 25个短语动词
以下是分句分段后的内容: 3,000. Thats 95% of spoken English. And I am teaching you all of these words. First, Ill teach you todays words. And then youll hear them in real conversations. With my brother. Stick around until the end, because witho…...
Java观察者模式深度解析:构建松耦合事件驱动系统的艺术
目录 观察者模式基础解析核心结构与实现原理Java内置观察者实现Spring框架中的高级应用典型应用场景与实战案例观察者模式变体与优化常见问题与最佳实践总结与未来展望1. 观察者模式基础解析 1.1 模式定义与核心思想 观察者模式(Observer Pattern)是一种行为型设计模式,它…...

DFT测试之TAP/SIB/TDR
TAP的作用 tap全称是test access port,是将jtag接口转为reset、sel、ce、ue、se、si、tck和so这一系列测试组件接口的模块。 jtag的接口主要是下面几个信号: 信号名称信号方向信号描述TCK(测试时钟)输入测试时钟,同…...

【推荐算法】DeepFM:特征交叉建模的革命性架构
DeepFM:特征交叉建模的革命性架构 一、算法背景知识:特征交叉的演进困境1.1 特征交叉的核心价值1.2 传统方法的局限性 二、算法理论/结构:双路并行架构2.1 FM组件:显式特征交叉专家2.2 Deep组件:隐式高阶交叉挖掘机2.3…...
C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException
【问题】 直接new一个PdfWriter的对象直接会报错: iText.Kernel.Exceptions.PdfException: Unknown PdfException. NotSupportedException: Either com.itextpdf:bouncy-castle-adapter or com.itextpdf:bouncy-castle-fips-adapter dependency must be added in…...

数据库表中「不是 null」的含义
例图: 1.勾选了「不是 null」(NOT NULL): 这个字段在数据库中必须有值,不能为空。也就是说,你插入数据的时候,必须给它赋值,否则插入会报错。 2.没有勾选「不是 null」ÿ…...
Elasticsearch的搜索流程描述
Elasticsearch 的搜索流程是一个结合 分布式查询、分片协同、结果聚合和排序 的复杂过程,其设计目标是在海量数据中实现快速检索和精准结果返回。以下是搜索流程的详细解析: 一、搜索流程总览 Elasticsearch 搜索流程示意图 (图源:Elastic 官方文档) 二、详细步骤解析 …...

Visual Studio问题记录
程序"xxx dotnet.exe"已退出,返回值为-2147450730 问deepseek:visual studio输出程序dotnet.exe已退出,返回值为-2147450730 dotnet.exe 编译时退出并返回错误代码 **-2147450730**(十六进制 0x80008076)&…...
GNSS终端授时方式-合集:PPS、B码、NTP、PTP、单站授时,共视授时
GNSS接收机具备授时功能,能够对外输出高精度的时间信息,并通过多种接口、多种形式进行时间信息的传递。 step by step介绍GNSS卫星导航定位基本原理,为什么定位需要至少4个卫星?这个文章的最后,我们介绍了为什么GNSS接…...
5.2 HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战
HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战 在HarmonyOS NEXT的全场景生态中,应用性能直接影响用户体验。通过专业的性能分析工具链、针对性的启动速度优化,以及精细化的功耗管理,开发者能够构建"秒…...
从EDR到XDR:终端安全防御体系演进实践指南
在数字化浪潮中,企业的终端安全面临着前所未有的挑战。从早期单纯的病毒威胁,到如今复杂多变的高级持续性威胁(APT)、零日漏洞攻击等,安全形势日益严峻。为应对这些挑战,终端安全防御技术不断演进ÿ…...

重启路由器ip不变怎么回事?原因分析与解决方法
在日常生活中,我们经常会遇到网络问题,而重启路由器是解决网络故障的常用方法之一。然而,有些用户发现,即使重启了路由器,自己的IP地址却没有变化,这让他们感到困惑。那么,重启路由器IP不变是怎…...

实践篇:利用ragas在自己RAG上实现LLM评估②
文章目录 使用ragas做评估在自己的数据集上评估完整代码代码讲解1. RAG系统构建核心组件初始化文档处理流程 2. 评估数据集构建3. RAGAS评估实现1. 评估数据集创建2. 评估器配置3. 执行评估 本系列阅读: 理论篇:RAG评估指标,检索指标与生成指…...
【CVE-2025-4123】Grafana完整分析SSRF和从xss到帐户接管
摘要 当Web应用程序使用URL参数并将用户重定向到指定的URL而不对其进行验证时,就会发生开放重定向。 /redirect?url=https://evil.com`–>(302重定向)–>`https://evil.com这本身可能看起来并不危险,但这种类型的错误是发现两个独立漏洞的起点:全读SSRF和帐户接管…...

高精度滚珠导轨在医疗设备中的多元应用场景
在医疗行业不断追求高效、精准与安全的今天,医疗设备的性能优化至关重要。每一个精密部件都像是设备这个庞大“生命体”中的细胞,共同维持着设备的稳定运行。滚珠导轨,这一看似不起眼却功能强大的传动元件,正悄然在医疗设备领域发…...