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

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全


大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」

决策树是一种简单直观的机器学习算法,它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决策,通过不断地将数据集分割成更小的子集来进行预测。本文将带你详细了解决策树系列算法的定义、原理、构建方法、剪枝与优化技术,以及它的优缺点。

一、决策树

1.1 决策树的定义与原理

决策树的定义:决策树是一种树形结构,其中每个节点表示一个特征的测试,每个分支表示一个测试结果,每个叶子节点表示一个类别或回归值。决策树的目标是通过一系列的特征测试,将数据分成尽可能纯的子集。

决策树的原理:决策树通过递归地选择最优特征进行分割来构建。最优特征的选择通常基于某种度量标准,如信息增益、基尼指数或方差减少。每次分割都会将数据集分成更小的子集,直到满足停止条件(如达到最大深度或子集纯度)为止。

1.2 决策树的构建方法

构建方法:

  1. 选择最优特征:使用信息增益、基尼指数或方差减少等标准来选择最优特征进行分割
  2. 分割数据集:根据最优特征的不同取值将数据集分割成若干子集
  3. 递归构建子树:对每个子集递归地选择最优特征进行分割,直到满足停止条件
  4. 生成叶子节点:当满足停止条件时,生成叶子节点并标记类别或回归值

1.3 决策树的剪枝与优化

剪枝技术:

  1. 预剪枝:在构建过程中提前停止树的生长,如限制树的最大深度、最小样本数或最小增益
  2. 后剪枝:在构建完成后,通过剪去不重要的子树来简化模型,如通过交叉验证选择最优剪枝点

优化方法:

  1. 特征选择:使用基于统计显著性的特征选择方法来减少特征数量
  2. 参数调整:通过网格搜索或随机搜索优化超参数,如最大深度、最小样本数等
  3. 集成方法:结合多个决策树(如随机森林、梯度提升树)来提高模型性能

1.4 决策树的优缺点

优点:

  1. 直观简单,易于理解和解释
  2. 适用于数值型和类别型数据
  3. 可以处理多输出问题

缺点:

  1. 容易过拟合,尤其是深树
  2. 对噪声和小变动敏感
  3. 计算复杂度高,尤其是在特征数多时

更多内容,见微*公号往期文章: 突破最强算法模型,决策树算法!!

防失联,进免费知识星球交流。算法知识直达星球:t.zsxq.com/ckSu3https://t.zsxq.com/ckSu3

更多内容,见免费知识星球

二、集成学习概述

集成学习是通过结合多个学习器的预测结果来提高模型性能的一种方法。它的核心思想是集成多个模型,通过投票、加权等方式获得更稳定、更准确的预测结果。集成学习在处理高维数据、降低过拟合和提高模型泛化能力方面具有显著优势。

2.1 集成学习的基本概念

集成学习的定义:集成学习(Ensemble Learning)是一种将多个基模型组合在一起的方法,其目标是通过结合多个模型的优点来提高整体性能。集成学习通常分为两类:同质集成(基模型相同,如随机森林)和异质集成(基模型不同,如堆叠模型)。

集成学习的原理:集成学习的基本原理是通过组合多个弱模型(即性能不佳的单个模型)来构建一个强模型(即性能优异的集成模型)。这种组合可以通过多种方式实现,常见的方法包括:Bagging、Boosting和Stacking。

以下是集成学习的一些常用方法:

  1. Bagging(Bootstrap Aggregating):通过对数据集进行有放回的随机抽样,生成多个子数据集,并在每个子数据集上训练基模型。最终的预测结果通过对所有基模型的预测结果进行平均或投票来确定
  2. Boosting:通过迭代地训练基模型,每个基模型在前一个基模型的基础上进行改进。每次迭代时,增加错误分类样本的权重,使得新模型能够更好地处理这些样本
  3. Stacking:通过训练多个基模型,并使用这些基模型的预测结果作为输入,训练一个次级模型来进行最终预测

2.2 Bagging 和 Boosting 的区别

Bagging(Bootstrap Aggregating):

  1. 通过对数据集进行有放回的随机抽样,生成多个子数据集
  2. 在每个子数据集上训练基模型
  3. 通过对所有基模型的预测结果进行平均或投票来确定最终结果
  4. 主要用于减少方差,防止过拟合

Boosting:

  1. 通过迭代地训练基模型,每个基模型在前一个基模型的基础上进行改进
  2. 每次迭代时,增加错误分类样本的权重,使得新模型能够更好地处理这些样本
  3. 通过加权平均或加权投票来确定最终结果
  4. 主要用于减少偏差,提高模型的准确性

主要区别:

  • 训练方式:Bagging 是并行训练多个基模型,Boosting 是串行训练多个基模型
  • 数据处理:Bagging 使用有放回的随机抽样,Boosting 根据错误率调整样本权重
  • 目标:Bagging 主要减少方差,Boosting 主要减少偏差

2.3 集成学习在机器学习中的重要性

提高模型性能:集成学习通过结合多个基模型的预测结果,可以显著提高模型的准确性和稳定性。这在处理复杂问题和高维数据时尤为重要

降低过拟合风险:集成学习通过对多个模型的预测结果进行综合,减少了单个模型的过拟合风险,使得模型具有更好的泛化能力

增强模型鲁棒性:集成学习可以通过结合不同的模型,提高模型对噪声和异常值的鲁棒性,增强模型在实际应用中的可靠性

三、Bagging

Bagging 是集成学习中的一种方法,通过并行训练多个基模型来提高整体性能。它通过对数据集进行有放回的随机抽样,生成多个子数据集,并在每个子数据集上训练基模型。最终的预测结果通过对所有基模型的预测结果进行平均或投票来确定。Bagging 主要用于减少模型的方差,防止过拟合。

3.1 Bagging 的定义与原理

Bagging 的定义:Bagging(Bootstrap Aggregating)是一种通过并行训练多个基模型来提高模型性能的集成学习方法。它通过对原始数据集进行有放回的随机抽样,生成多个子数据集,并在每个子数据集上训练基模型。

Bagging 的原理:Bagging 的核心思想是通过减少模型的方差来提高模型的泛化能力。具体步骤如下:

  1. 从原始数据集中有放回地随机抽样生成多个子数据集
  2. 在每个子数据集上训练一个基模型
  3. 对每个基模型的预测结果进行平均(回归任务)或投票(分类任务)以得到最终预测结果

3.2 Bagging 的具体算法与流程

Bagging 的具体流程:

  1. 数据集生成:对原始数据集进行有放回的随机抽样,生成多个子数据集
  2. 模型训练:在每个子数据集上训练一个基模型(如决策树)
  3. 结果综合:对每个基模型的预测结果进行平均或投票,得到最终的预测结果

3.3 Bagging 的优缺点

优点:

  1. 减少方差:通过对多个基模型的预测结果进行综合,Bagging 能有效减少模型的方差,提升模型的泛化能力
  2. 防止过拟合:由于每个基模型是在不同的子数据集上训练的,Bagging 能有效防止单个模型过拟合
  3. 简单易用:Bagging 方法实现简单,适用于多种基模型

缺点:

  1. 计算复杂度高:由于需要训练多个基模型,Bagging 的计算复杂度较高,训练时间较长
  2. 模型解释性差:由于 Bagging 是对多个基模型的结果进行综合,单个基模型的解释性较差,难以解释最终模型的预测结果

Bagging 方法在处理高维数据和防止过拟合方面具有显著优势,适用于多种机器学习任务。

抱个拳,送个礼

四、随机森林

随机森林是 Bagging 的一种改进版本,通过构建多个决策树并结合它们的预测结果来提高模型的准确性和稳定性。与 Bagging 不同的是,随机森林在每次分割节点时还会随机选择部分特征进行考虑,从而进一步增加模型的多样性。

4.1 随机森林的定义与原理

随机森林的定义:随机森林(Random Forest)是一种基于决策树的集成学习方法,通过构建多个决策树并结合它们的预测结果来提高模型的性能。每棵树在训练时都使用了不同的样本和特征,从而增加了模型的多样性和鲁棒性。

随机森林的原理:随机森林的核心思想是通过引入随机性来减少模型的方差和过拟合风险。具体步骤如下:

  1. 对原始数据集进行有放回的随机抽样,生成多个子数据集
  2. 在每个子数据集上训练一棵决策树。在每个节点分割时,随机选择部分特征进行考虑
  3. 对所有决策树的预测结果进行平均(回归任务)或投票(分类任务)以得到最终预测结果

4.2 随机森林的构建方法

构建方法:

  1. 数据集生成:对原始数据集进行有放回的随机抽样,生成多个子数据集
  2. 决策树训练:在每个子数据集上训练一棵决策树,在每个节点分割时随机选择部分特征进行考虑
  3. 结果综合:对所有决策树的预测结果进行平均或投票,得到最终的预测结果

4.3 随机森林的优化技术

优化方法:

  1. 特征选择:通过分析特征重要性,选择最有价值的特征进行训练
  2. 参数调整:使用网格搜索或随机搜索优化超参数,如树的数量(n_estimators)、最大深度(max_depth)、最小样本数(min_samples_split)等
  3. 样本加权:在训练时对样本进行加权处理,使得模型对不同样本的重要性有所区别
  4. 交叉验证:通过交叉验证评估模型性能,选择最优参数配置

4.4 随机森林的优缺点

优点:

  1. 高准确率:通过集成多个决策树,随机森林具有较高的预测准确率
  2. 抗过拟合:通过引入随机性,随机森林能有效减少过拟合风险
  3. 特征重要性评估:随机森林可以评估各个特征的重要性,帮助理解数据

缺点:

  1. 计算复杂度高:由于需要训练多个决策树,随机森林的计算复杂度较高,训练时间较长
  2. 内存占用大:随机森林需要存储多个决策树模型,占用较多内存
  3. 模型解释性差:由于随机森林是对多个决策树的结果进行综合,单个决策树的解释性较差,难以解释最终模型的预测结果

随机森林在处理高维数据和防止过拟合方面具有显著优势,适用于多种机器学习任务。

更多内容,见微*公号往期文章:突破最强算法模型!!学会随机森林,你也能发表高水平SCI

防失联,进免费知识星球交流。算法知识直达星球:t.zsxq.com/ckSu3

免费知识星球,欢迎加入交流

五、Boosting

Boosting 是另一种强大的集成学习方法,通过逐步改进弱模型的性能来构建一个强模型。与 Bagging 不同,Boosting 是一种串行过程,每个基模型在训练时都会关注前一个模型中被错误分类的样本,从而不断提高整体模型的准确性。

5.1 Boosting 的定义与原理

Boosting 的定义:Boosting 是一种集成学习方法,通过逐步训练多个弱模型,每个模型在前一个模型的基础上进行改进,最终将这些弱模型组合成一个强模型。常见的 Boosting 算法包括 AdaBoost、GBDT 和 XGBoost。

Boosting 的原理:Boosting 的核心思想是通过逐步减小模型的偏差来提高整体性能。具体步骤如下:

  1. 初始化模型,将所有样本的权重设为相等
  2. 训练第一个基模型,计算每个样本的误差
  3. 根据误差调整样本的权重,使得错误分类的样本权重增加
  4. 训练下一个基模型,并继续调整样本权重,直至达到指定的模型数量或误差阈值
  5. 最终将所有基模型的预测结果进行加权平均或加权投票,得到最终预测结果

5.2 Boosting 的具体算法与流程

Boosting 的具体流程:

  1. 初始化权重:将所有样本的权重设为相等
  2. 训练基模型:在当前样本权重下训练基模型,计算每个样本的误差
  3. 调整权重:根据误差调整样本的权重,错误分类的样本权重增加
  4. 重复步骤 2 和 3:直至达到指定的基模型数量或误差阈值
  5. 加权综合:将所有基模型的预测结果进行加权平均或加权投票,得到最终预测结果

5.3 Boosting 的优缺点

优点:

  1. 高准确率:通过逐步改进模型性能,Boosting 能显著提高模型的预测准确率
  2. 减少偏差:通过关注前一个模型的错误分类样本,Boosting 能有效减少模型的偏差
  3. 灵活性强:Boosting 可以与多种基模型结合,具有较高的灵活性

缺点:

  1. 计算复杂度高:由于需要逐步训练多个基模型,Boosting 的计算复杂度较高,训练时间较长
  2. 易过拟合:如果基模型过于复杂或迭代次数过多,Boosting 可能会导致过拟合
  3. 对噪声敏感:由于 Boosting 会增加错误分类样本的权重,可能会对噪声样本过度拟合

Boosting 方法在处理复杂数据和提高模型准确性方面具有显著优势,适用于多种机器学习任务

六、Adaboost

Adaboost 是 Boosting 家族中最早提出的一种算法,通过逐步调整样本权重来训练一系列弱分类器,从而组合成一个强分类器。它的核心思想是让后续的分类器重点关注前面被错误分类的样本,从而提高模型的准确性。

6.1 Adaboost 的定义与原理

Adaboost 的定义:Adaboost(Adaptive Boosting)是一种自适应 Boosting 算法,通过调整样本权重来逐步提高模型性能。每个弱分类器的权重根据其错误率进行调整,错误率低的分类器权重较高,错误率高的分类器权重较低。

Adaboost 的原理:Adaboost 的核心思想是通过逐步调整样本权重,使得每个弱分类器能够更好地处理前一个分类器错误分类的样本。具体步骤如下:

  1. 初始化样本权重,使得每个样本的权重相等
  2. 训练弱分类器,并计算其错误率
  3. 根据错误率调整分类器权重,错误率越低的分类器权重越高
  4. 根据错误分类情况调整样本权重,错误分类的样本权重增加
  5. 迭代上述步骤,直到达到指定的弱分类器数量或误差阈值
  6. 最终将所有弱分类器的预测结果进行加权综合,得到最终预测结果

6.2 Adaboost 的构建方法

构建方法:

  1. 初始化权重:将所有样本的权重设为相等
  2. 训练弱分类器:在当前样本权重下训练弱分类器,计算每个样本的误差
  3. 调整分类器权重:根据弱分类器的错误率调整其权重,错误率越低的分类器权重越高
  4. 调整样本权重:根据错误分类情况调整样本权重,错误分类的样本权重增加
  5. 重复步骤 2-4:直到达到指定的弱分类器数量或误差阈值
  6. 加权综合:将所有弱分类器的预测结果进行加权综合,得到最终预测结果

6.3 Adaboost 的优化技术

优化方法:

  1. 参数调整:通过网格搜索或随机搜索优化超参数,如弱分类器数量(n_estimators)、学习率(learning_rate)等
  2. 弱分类器选择:选择合适的弱分类器,如决策树、线性模型等,根据具体问题选择最优模型
  3. 样本加权:在训练时对样本进行加权处理,使得模型对不同样本的重要性有所区别
  4. 交叉验证:通过交叉验证评估模型性能,选择最优参数配置

6.4 Adaboost 的优缺点

优点:

  1. 高准确率:通过逐步改进模型性能,Adaboost 能显著提高模型的预测准确率
  2. 减少偏差:通过关注前一个模型的错误分类样本,Adaboost 能有效减少模型的偏差
  3. 适用于多种基模型:Adaboost 可以与多种基模型结合,具有较高的灵活性

缺点:

  1. 计算复杂度高:由于需要逐步训练多个弱分类器,Adaboost 的计算复杂度较高,训练时间较长
  2. 易过拟合:如果弱分类器过于复杂或迭代次数过多,Adaboost 可能会导致过拟合
  3. 对噪声敏感:由于 Adaboost 会增加错误分类样本的权重,可能会对噪声样本过度拟合

Adaboost 方法在处理复杂数据和提高模型准确性方面具有显著优势,适用于多种机器学习任务

抱个拳,送个礼

七、GBDT

GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是一种基于决策树的 Boosting 方法,通过逐步构建一系列决策树来提升模型的预测性能。每棵树都在前面所有树的残差上进行拟合,从而不断减小整体模型的误差。

7.1 GBDT 的定义与原理

GBDT 的定义:GBDT 是一种通过逐步构建一系列决策树来提升模型性能的集成学习方法。每棵树都在前面所有树的残差上进行拟合,以减小整体模型的误差。GBDT 适用于回归和分类任务,在许多实际应用中表现出色。

GBDT 的原理:GBDT 的核心思想是通过逐步减小残差来提高模型的准确性。具体步骤如下:

  1. 初始化模型,将所有样本的预测值设为目标值的均值(回归)或初始概率(分类)
  2. 计算当前模型的残差,即目标值与当前预测值之间的差异
  3. 训练一棵决策树来拟合残差,得到新的预测值
  4. 更新模型的预测值,将新的预测值加到当前预测值上
  5. 重复步骤 2-4,直到达到指定的树数量或误差阈值

7.2 GBDT 的构建方法

构建方法:

  1. 初始化预测值:将所有样本的预测值设为目标值的均值(回归)或初始概率(分类)
  2. 计算残差:计算当前模型的残差,即目标值与当前预测值之间的差异
  3. 训练决策树:在当前残差上训练一棵决策树,得到新的预测值
  4. 更新预测值:将新的预测值加到当前预测值上
  5. 重复步骤 2-4:直到达到指定的树数量或误差阈值

7.3 GBDT 的优化技术

优化方法:

  1. 参数调整:通过网格搜索或随机搜索优化超参数,如树的数量(n_estimators)、学习率(learning_rate)、最大深度(max_depth)等
  2. 特征选择:通过分析特征重要性,选择最有价值的特征进行训练
  3. 正则化:通过添加正则化项来控制模型的复杂度,防止过拟合
  4. 早停:通过监控验证集上的误差,在误差不再显著降低时提前停止训练

7.4 GBDT 的优缺点

优点:

  1. 高准确率:通过逐步减小残差,GBDT 能显著提高模型的预测准确率
  2. 减少偏差:通过在残差上训练决策树,GBDT 能有效减少模型的偏差
  3. 处理非线性关系:GBDT 能处理复杂的非线性关系,适用于多种数据类型

缺点:

  1. 计算复杂度高:由于需要逐步训练多个决策树,GBDT 的计算复杂度较高,训练时间较长
  2. 易过拟合:如果决策树过于复杂或迭代次数过多,GBDT 可能会导致过拟合
  3. 对参数敏感:GBDT 对参数设置较为敏感,需要仔细调整超参数以获得最佳性能

GBDT 方法在处理复杂数据和提高模型准确性方面具有显著优势,适用于多种机器学习任务。接下来我们会详细探讨 XGBoost 及其具体实现。

免费知识星球,欢迎加入,一起交流切磋

八、XGBoost

XGBoost 是一种高效的梯度提升算法,被广泛应用于各种机器学习竞赛和实际项目中。它在 GBDT 的基础上进行了多种优化,包括正则化、并行处理和树结构的改进,使得其在精度和效率上均有显著提升。

8.1 XGBoost 的定义与原理

XGBoost 的定义:XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树的增强版算法,具有更高的效率和准确性。XGBoost 通过引入二阶导数信息、正则化项和并行处理等技术,显著提升了模型的性能和训练速度。

XGBoost 的原理:XGBoost 的核心思想与 GBDT 类似,通过逐步减小残差来提高模型的准确性。不同的是,XGBoost 引入了以下优化:

  1. 正则化项:通过添加 L1 和 L2 正则化项来控制模型复杂度,防止过拟合
  2. 二阶导数信息:在优化目标函数时引入二阶导数信息,提高优化精度
  3. 并行处理:通过并行计算和分布式计算加速模型训练
  4. 树结构优化:使用贪心算法和剪枝技术优化树的结构

8.2 XGBoost 的构建方法

构建方法:

  1. 数据准备:将数据转换为 DMatrix 格式,XGBoost 专用的数据结构
  2. 设置参数:配置 XGBoost 的超参数,如目标函数、最大深度、学习率等
  3. 训练模型:使用训练数据训练 XGBoost 模型
  4. 预测结果:使用训练好的模型进行预测
  5. 评估性能:计算预测结果的准确性等指标

8.3 XGBoost 的优化技术

优化方法:

  1. 参数调整:通过网格搜索或随机搜索优化超参数,如树的数量(num_round)、学习率(eta)、最大深度(max_depth)等
  2. 特征选择:通过分析特征重要性,选择最有价值的特征进行训练
  3. 正则化:通过添加 L1 和 L2 正则化项来控制模型的复杂度,防止过拟合
  4. 早停:通过监控验证集上的误差,在误差不再显著降低时提前停止训练

8.4 XGBoost 的优缺点

优点:

  1. 高准确率:通过引入多种优化技术,XGBoost 具有极高的预测准确率
  2. 快速训练:通过并行计算和分布式计算,XGBoost 的训练速度非常快
  3. 正则化控制:通过添加 L1 和 L2 正则化项,XGBoost 能有效控制模型复杂度,防止过拟合
  4. 处理缺失值:XGBoost 能自动处理数据中的缺失值,提高模型的鲁棒性

缺点:

  1. 参数调整复杂:XGBoost 具有大量超参数,需要仔细调整以获得最佳性能
  2. 内存占用大:XGBoost 需要存储大量中间结果,内存占用较大
  3. 对数据预处理敏感:XGBoost 对数据预处理要求较高,需确保数据规范化和特征选择合理

XGBoost 方法在处理复杂数据和提高模型准确性方面具有显著优势,适用于多种机器学习任务

更多内容,见微*公号往期文章:不愧是腾讯,问基础巨细节 。。。

[ 抱个拳,总个结 ]

集成学习算法通过结合多个基模型的预测结果来提高模型的性能。常见的集成学习算法包括 Bagging、Boosting、随机森林、Adaboost、GBDT 和 XGBoost。每种算法都有其独特的优势和适用场景。

9.1 各算法的比较

Bagging vs Boosting:

  • Bagging(如随机森林)主要通过并行训练多个基模型来减少方差,防止过拟合。它在处理高维数据和噪声数据时表现出色,适用于多种任务
  • Boosting(如 Adaboost 和 GBDT)通过串行训练多个基模型来逐步减少模型偏差。它更适合处理复杂的非线性关系,但训练时间较长,对数据预处理要求较高

随机森林 vs GBDT:

  • 随机森林是 Bagging 的一种实现,通过构建大量的决策树来提高模型性能。它具有较高的抗过拟合能力和训练速度,但在处理复杂非线性关系时可能表现不如 GBDT
  • GBDT 是 Boosting 的一种实现,通过逐步拟合残差来提高模型性能。它在处理复杂非线性关系和高维数据方面表现出色,但训练时间较长,参数调整复杂

XGBoost:

  • XGBoost 是 GBDT 的增强版,通过引入正则化、并行处理和二阶导数信息等技术,显著提高了模型的准确性和训练速度。它在各种机器学习竞赛和实际项目中表现优异,适用于多种任务

9.2 实际应用中的选择指南

选择集成学习算法时应考虑以下因素:

  1. 数据特性:
  • 数据维度较高且噪声较多时,Bagging 和随机森林表现较好
  • 数据关系复杂且存在非线性特征时,Boosting、GBDT 和 XGBoost 更为适用
  • 模型性能:
  • 需要高准确率和稳定性的任务,优先选择 XGBoost 或 GBDT
  • 需要快速训练和较低复杂度的任务,可以选择 Bagging 或随机森林
  • 计算资源:
  • 有足够的计算资源和时间,可以选择 XGBoost 或 GBDT 以获得最佳性能
  • 资源有限或时间紧迫时,Bagging 和随机森林是更好的选择
  • 过拟合风险:
  • 数据量较小或过拟合风险较高时,选择具有较高抗过拟合能力的算法,如 Bagging、随机森林和 XGBoost

综合考虑,在实际应用中选择合适的集成学习算法可以显著提高模型的性能和鲁棒性。以下是一个简要的选择指南:

  • Bagging:适用于高维、噪声较多的数据,快速训练,防止过拟合
  • Boosting:适用于复杂的非线性关系,逐步减少偏差,提高准确性
  • 随机森林:适用于各种任务,具有较高的抗过拟合能力和训练速度
  • Adaboost:适用于分类任务,逐步调整样本权重,提高模型性能
  • GBDT:适用于处理复杂数据和高维数据,提高模型准确性,但训练时间较长
  • XGBoost:适用于各种任务,具有最高的准确性和训练速度,但参数调整复杂

通过合理选择和应用集成学习算法,可以有效提升机器学习模型的性能,为各种实际任务提供强大的解决方案。


接下来,大侠可以具体选定某个算法进行更深入的研究或实践应用。山高路远,江湖再会

- 科研为国分忧,创新与民造福 -

日更时间紧任务急,难免有疏漏之处,还请大侠海涵 内容仅供学习交流之用,部分素材来自网络,侵联删

[ 算法金,碎碎念 ]

7677c3f62b03df3b8b51b6ab8666f78.jpg

全网同名,日更万日,让更多人享受智能乐趣

如果觉得内容有价值,烦请大侠多多 分享、在看、点赞,助力算法金又猛又持久、很黄很 BL 的日更下去;

同时邀请大侠 关注、星标 算法金,围观日更万日,助你功力大增、笑傲江湖

相关文章:

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法,它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决…...

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…...

单例模式---线程安全实现

文章目录 1.单例模式的特点😊2.单例模式两种实现🤣🤗😊2.1 饿汉式2.2 懒汉式 3.传统单例模式的线程安全问题4.解决方法4.1静态局部变量4.2加锁4.3双重检查锁(DCL)4.4pthread_once 1.单例模式的特点&#x1…...

Agent技术在现代软件开发与应用中的探索

一、引言 随着计算机科学的快速发展,Agent技术作为人工智能和分布式计算领域的重要分支,已经渗透到软件开发的各个方面。Agent技术通过赋予软件实体自主性和交互性,使得软件系统能够更加智能、灵活地响应环境变化和用户需求。本文将对Agent技…...

c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功

关键字extern的作用 这个很常见的都知道是定义一个外部变量或函数,但并不是简单的建立两个文件,然后在用extern 定义在另一个非最初定义变量的文件里 区分文件和编译运行的文件 例如,一个文件夹里有文件a.c和文件b.c,在sublime text中直接…...

时序数据中的孤立野点、异常值识别及处理方法

目录 参考资料 对时序数据做差分; 参考资料 [1] 离群点(孤立点、异常值)检测方法 2017.6;...

JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇

JetBrains PyCharm 2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。 JetBrains PyCharm 20…...

MCU解决800V电动汽车牵引逆变器的常见设计挑战的3种方式

电动汽车 (EV) 牵引逆变器是电动汽车的。它将高压电池的直流电转换为多相(通常为三相)交流电以驱动牵引电机,并控制制动产生的能量再生。电动汽车电子产品正在从 400V 转向 800V 架构,这有望实现: 快速充电 – 在相同…...

《逆向投资 邓普顿的长赢投资法》

接下来跟大家一起学习《逆向投资 邓普顿的长赢投资法》。邓普顿被誉为20世纪最伟大的选股人之一,我非常确信林奇在他的《战胜华尔街》里也提到了邓普顿,可惜实在想不起来林奇是怎么形容邓普顿的。 邓普顿拥有70多年的投资生涯,在他晚年时曾总…...

C++中main函数的参数、返回值分别什么意思?main函数返回值跟普通函数返回值一样吗?

在C中,main函数是程序的入口点,即程序开始执行的地方。main函数可以有两种形式的签名(signature): 标准的main函数,不接受任何参数,也不返回任何值: int main() {// 代码... }带有参…...

Java程序员学习Go开发Higress的WASM插件

Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战,研究一下。之前没搞过go,踩了很多坑,最主要的就是tinygo打包,多方寻求解决无果,结论是tinygo0.32go1.19无法在macos arm架构下打包。…...

Python入门-基本数据类型-数字类型

数字类型是指表示数字或者数值的数据类型。在Python语言中,数字类型有整型(int)、 浮点型(float)、复数型(complex),对应数学中的整数、小数和复数,此外还有一种特殊 的整型,即布尔型(bool)。本节将对这4种数字类型进行详细介绍。…...

小程序web-view无法打开该页面的解决方法

问题:开发者工具可以正常打开,正式上线版小程序使用 web-view 组件测试时提示:“无法打开该页面,不支持打开 https://xxxxxx,请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 解决方法:需要配…...

海外媒体发稿:媒体宣发套餐的作用分享-华媒舍

一、神奇媒体宣发套餐 神奇媒体宣发套餐是一项专业的多媒体宣传推广服务,旨在帮助企业、个人快速提升品牌知名度和曝光度。它通过全面覆盖主流媒体、社交网络以及各大网络平台,将您的宣传信息传递给广泛的受众群体,实现全方位、多角度的宣传…...

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi,可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小,在输出的时候保持宽度和高度一致即可,步骤如下: 如上的“10…...

【shell脚本实战案例】数据磁盘初始化

文章目录 一、案例应用场景二、案例需求三、案例算法四、代码实现五、实现验证 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留…...

1.7 计算机体系结构分类

Flynn分类法 CISC与RISC...

数据结构之B树:深入了解与应用

目录 1. B树的基本概念 1.1 B树的定义 1.2 B树的性质 1.3 B树的阶 2. B树的结构 2.1 节点结构 2.2 节点分裂 2.3 节点合并 3. B树的基本操作 3.1 搜索 3.2 插入 3.3 删除 4. B树的应用 4.1 数据库索引 4.2 文件系统 4.3 内存管理 5. B树的优势和局限 5.1 优势…...

Tensorflow入门实战 T06-Vgg16 明星识别

目录 1、前言 2、 完整代码 3、运行过程结果 4、遇到的问题 5、小结 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 1、前言 这周主要是使用VGG16模型,完成明星照片识别。 2、 完整代…...

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…...

Linux: network: 丢包分析的另一个途径 tracing

丢包的另一个思路&#xff0c;内核里有些counter的计数&#xff0c;记录的不准确。这个时候怎么办&#xff1f;就需要使用另外一个方式&#xff1a;/sys/kernel/debug/tracing/event/skb/kfree_skb 的跟踪功能。这个算是对counter的一个补充&#xff0c;可以拿来做统计分析使用…...

【保姆级教程+配置源码】在VScode配置C/C++环境

目录 一、下载VScode 1. 在官网直接下载安装即可 2. 安装中文插件 二、下载C语言编译器MinGW-W64 三、配置编译器环境变量 1. 解压下载的压缩包&#xff0c;复制该文件夹下bin目录所在地址 2. 在电脑搜索环境变量并打开 3. 点击环境变量→选择系统变量里的Path→点击编…...

Qt creator实现一个简单计算器

目录 1 界面设计 2 思路简介 3 代码 目录 1 界面设计 ​2 思路简介 3 代码 3.1 widget.h 3.2 widget.c 4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作&#xff0c;能实现简单的计算器功能。 1 界…...

Java代码基础算法练习-计算被 3 或 5 整除数之和-2024.06.29

任务描述&#xff1a; 计算 1 到 n 之间能够被 3 或者 5 整除的数之和。 解决思路&#xff1a; 输入的数字为 for 循环总次数&#xff0c;每次循环就以当前的 i 进行 3、5 的取余操作&#xff0c;都成立计入总数sum中&#xff0c;循环结束&#xff0c;输出 sum 的值 代码示例&…...

Socket编程详解(二)核心代码讲解

本文对代码的讲解基于上一篇博客 快速链接 Socket编程详解&#xff08;一&#xff09;服务端与客户端的双向对话 小试牛刀1&#xff1a;委托声明的关键字和委托方法使用的方法名是不一样的名称 可读性&#xff1a;有时&#xff0c;委托的名称可能描述了它的用途或它在哪里被…...

(项目实战)聚合支付系统开发环境搭建-基于VMware17安装Centos7.9

1 开发环境介绍 dtpay聚合支付系统和ecard预付卡系统&#xff0c;服务端部署在Linux环境。后续的开发环境&#xff0c;生产环境都是基于Linux进行搭建&#xff0c;系统使用到的相关中间件(RocketMQ,Redis&#xff0c;Nginx等)&#xff0c;配置中心Nacos&#xff0c;数据库MySQ…...

Python现在可以在线编程了!

你好&#xff0c;我是郭震 1 在线编程 在线编程好处&#xff1a; 1 无需安装和配置环境: 在线编程平台不需要用户在本地安装任何软件或配置开发环境。这对初学者和那些希望快速上手进行编程的人非常有利。 2 跨平台兼容性: 这些平台可以在任何具有互联网连接的设备上使用&#…...

ThreadPoolExecutor线程池创建线程

线程池介绍 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统资源&#…...

畅谈GPT-5

前言 ChatGBT(Chat Generative Bidirectional Transformer)是一种基于自然语言处理技术的对话系统,它的出现是人工智能和自然语言处理技术发展的必然趋势。随着技术的更新和进步&#xff0c;GPT也迎来了一代代的更新迭代。 1.GPT的回顾 1.1 GPT-3的介绍 GPT-3&#xff08;Gen…...

石家庄高校大学智能制造实验室数字孪生可视化系统平台项目验收

智能制造作为未来制造业的发展方向&#xff0c;已成为各国竞相发展的重点领域。石家庄高校大学智能制造实验室积极响应国家发展战略&#xff0c;结合自身优势&#xff0c;决定引进数字孪生技术&#xff0c;构建一个集教学、科研、生产于一体的可视化系统平台。 数字孪生可视化…...

WLAN 4-Way Handshake如何生成GTK?

关于Wi-Fi的加密认证过程&#xff0c;可以参考如下链接&#xff0c;今天我们来理解如何生成GTK。 WLAN数据加密机制_tls加密wifi-CSDN博客 1 GTK GTK&#xff08;Group Temporal Key&#xff09;是由AP通过GMK生成&#xff0c;长度为128位&#xff0c;并在四次握手的第三步中…...

Qt/C++模拟鼠标键盘输入

1、控制鼠标移动 &#xff08;1&#xff09;Qt方案 QScreen* sc QGuiApplication::primaryScreen(); QCursor* c new QCursor(); int deltaX 10; int deltaY 10; c->setPos(sc, c->pos().x() deltaX, c->pos().y() deltaY);&#xff08;2&#xff09;Windows原…...

OpenGL3.3_C++_Windows(22)

材质&#xff1a; 决定物体在渲染过程中最终视觉呈现的关键因素之一&#xff0c;它通过一系列光学&#xff08;投光物&#xff09;和物理参数&#xff08;反光度&#xff0c;反照率、金属度&#xff0c;折射率……&#xff09;准确模拟现实世界中的材料特性&#xff0c;从而增…...

electron-builder 打包过慢解决

报错内容如下 > 6-241.0.0 build > electron-builder • electron-builder version24.13.3 os10.0.22631 • loaded configuration filepackage.json ("build" field) • writing effective config filedist\builder-effective-config.yaml • pack…...

leetcode226反转二叉树

本文主要讲解反转二叉树的要点与细节&#xff0c;按照步骤思考更方便理解 c和java代码如下&#xff0c;末尾 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 具体要点&#xff1a; 1. 首先我们要理解题意&#xff0c; 反转二叉树具体…...

【自然语言处理系列】探索NLP:使用Spacy进行分词、分句、词性标注和命名实体识别,并以《傲慢与偏见》与全球恐怖活动两个实例文本进行分析

本文深入探讨了scaPy库在文本分析和数据可视化方面的应用。首先&#xff0c;我们通过简单的文本处理任务&#xff0c;如分词和分句&#xff0c;来展示scaPy的基本功能。接着&#xff0c;我们利用scaPy的命名实体识别和词性标注功能&#xff0c;分析了Jane Austen的经典小说《傲…...

【Rust】function和methed的区别

文章目录 functionmethedAssociated Functions 参考资料 一句话总结&#xff1a; function和methed很多都是相同的。 不同点在于&#xff1a; methed定义在结构体里面&#xff0c;并且它的第一个参数肯定是self&#xff0c;代表结构体实例。方法需要用实例名.方法名调用当然结…...

python基础语法 003-4 数据类型集合

1 集合 1.1 什么是集合 什么是集合&#xff1f;ANS:集合set是一个无序的不重复元素序列集合怎么表示&#xff1f;ANS: {} , 用逗号隔开打印元组类型&#xff0c;type()一个元素的集合怎么表示&#xff1f;&#xff1a;ANS:存储多种类型{"a", 1} """…...

Vue如何引用组件

在 Vue.js 中&#xff0c;你可以通过几种方式引用组件&#xff1a; 全局注册 在 main.js 或你的主入口文件中&#xff0c;你可以使用 Vue.component() 方法来全局注册一个组件。这意味着这个组件可以在你的 Vue 应用的任何地方使用。 import MyComponent from ./components/…...

vue3中省市区联动在同一个el-form-item中咋么设置rules验证都不为空的效果

在开发中出现如下情况&#xff0c;在同一个el-form-item设置了省市区三级联动的效果 <el-form-item label"地区" prop"extraProperties.Province"><el-row :gutter"20"><el-col :span"12"><el-select v-model&qu…...

如何集成CppCheck到visual studio中

1.CPPCheck安装 在Cppcheck官方网站下载最新版本1.70&#xff0c;官网链接&#xff1a;http://cppcheck.sourceforge.net/ 安装Cppcheck 2.集成步骤 打开VS&#xff0c;菜单栏工具->外部工具->添加&#xff0c;按照下图设置&#xff0c;记得勾选“使用输出窗口” 2.…...

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

GWO-CNN-SVM&#xff0c;基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1. GWO灰狼优化算法 灰狼优化算法&#xff08;Grey Wolf Optimizer, GWO&#xff09;是一种启发式优化算法&#xff0c;模拟了灰狼群体的社会行为&#xff0c;包…...

Go-知识测试-工作机制

Go-知识测试-工作机制 生成test的maintest的main如何启动case单元测试 runTeststRunnertesting.T.Run 示例测试 runExamplesrunExampleprocessRunResult 性能测试 runBenchmarksrunNtesting.B.Run 在 Go 语言的源码中&#xff0c;go test 命令的实现主要在 src/cmd/go/internal…...

【小程序静态页面】猜拳游戏大转盘积分游戏小程序前端模板源码

猜拳游戏大转盘积分游戏小程序前端模板源码&#xff0c; 一共五个静态页面&#xff0c;首页、任务列表、大转盘和猜拳等五个页面。 主要是通过做任务来获取积分&#xff0c;积分可以兑换商品&#xff0c;也可用来玩游戏&#xff1b;通过玩游戏既可能获取奖品或积分也可能会消…...

JupyterServer配置

1. 安装jupyter ​pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout1000 2. 生成配置 jupyter notebook --generate-config 3. 修改配置&#xff0c;设置密码 获取密码的方式&#xff1a;命令行输入python后&#xff0c;用以下方式获…...

信息检索(57):MINIMIZING FLOPS TO LEARN EFFICIENT SPARSE REPRESENTATIONS

MINIMIZING FLOPS TO LEARN EFFICIENT SPARSE REPRESENTATIONS 摘要1 引言2 相关工作3 预期 FLOPS 次数4 我们的方法5 实验6 结论 发布时间&#xff08;2020&#xff09; 最小化 Flop 来学习高效的稀疏表示 摘要 1&#xff09;学习高维稀疏表示 2&#xff09;FLOP 集成到损失…...

Python 面试【中级】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

[Open-source tool]Uptime-kuma的簡介和安裝於Ubuntu 22.04系統

[Uptime Kuma]How to Monitor Mqtt Broker and Send Status to Line Notify Uptime-kuma 是一個基於Node.js的開軟軟體&#xff0c;同時也是一套應用於網路監控的開源軟體&#xff0c;其利用瀏覽器呈現直觀的使用者介面&#xff0c;如圖一所示&#xff0c;其讓使用者可監控各種…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 灰度图像恢复(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…...

leetcode494. 目标和

1.思想方法 2.代码 class Solution { public int findTargetSumWays(int[] nums, int target) {int sum 0;for(int num : nums)sum num;if(sum < Math.abs(target) || (targetsum)%2 ! 0)return 0;int x (targetsum) / 2,n nums.length;//基于滚动数组的方法int[] dp…...

一文了解自定义表单系统开源的多个优势

降本、提质、增效&#xff0c;是当前很多企业都想实现的目的。什么样的软件可以助力企业创造价值&#xff1f;低代码技术平台是近些年得到了很多客户喜爱的平台产品&#xff0c;因为它能帮助大家减少编程代码的撰写&#xff0c;能轻松助力各部门之间做好协调沟通工作&#xff0…...

【操作系统】进程管理——线程管理(个人笔记)

学习日期&#xff1a;2024.7.2 内容摘要&#xff1a;线程的概念、存在的意义、线程的属性&#xff0c;线程的实现方式&#xff0c;线程的状态与组织。 线程的概念 拿QQ来说&#xff0c;QQ既可以打视频电话&#xff0c;也可以在这同时进行文字聊天或传送文件&#xff0c;进程是…...

【海思Hi3403V100】多目拼接相机套板硬件规划方案

海思Hi3403V100 是专业超高清智能网络摄像头 SoC。该芯片最高支持四路 sensor 输入&#xff0c;支持最高 4K60fps 的 ISP 图像处理能力&#xff0c;支持 3F 、WDR、多级降噪、六轴防抖、硬件拼接、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI 算法对输入图像…...

商业零售行业面临着日益增长的跨国运营需求

随着全球化的步伐加快&#xff0c;商业零售行业面临着日益增长的跨国运营需求。中国联通国际通过积极拓展全球资源&#xff0c;运用先进的移动网络与SDN网络技术&#xff0c;为零售行业在全球各地的分支机构提供高效、灵活的组网与通信解决方案。 一、行业需求 1. 更低成本 …...

Linux:网络基础1

文章目录 前言1. 协议1.1 为什么要有协议&#xff1f;1.2 什么是协议&#xff1f; 2. 网络2.1 网络通信的问题2.2 网络的解决方案——网络的层状结构2.3 网络和系统的关系2.4 网络传输基本流程2.5 简单理解IP地址2.6 跨网络传输 总结 前言 在早期的计算机发展中&#xff0c;一开…...

spring-boot-starter-json配置对象属性为空不显示

问题背景 在Spring Boot中使用spring-boot-starter-json&#xff08;通常是通过jackson实现的&#xff09;时&#xff0c;如果你希望在序列化对象时&#xff0c;如果某个属性为空&#xff0c;则不显示该属性&#xff0c;你可以使用JsonInclude注解来实现这一点。 pom.xml <…...

领克07EM-P诠释原创精神,助力行业向上发展

随着五月悄然而至,北京汽车车展如约召开,各大车企携手全新车型纷纷亮相。5月17日,中国原创汽车品牌领克为用户带来了新品,领克07 EM-P迎来上市。这意味着领克在高端电动轿车市场正式站稳脚跟,出色的产品魅力,也成为很多消费者的优质选择。此次发布会现场,领克07 EM-P共推…...

刚上市订单破5万,奇瑞风云T9开启家用SUV豪华平权时代

5月21日,奇瑞风云T9正式上市,共推出4款车型,售价12.99-16.99万元,相比此前的预售价便宜了足足3万元。值得一提的是,在上市发布会结束时,新车的累计订单量已经突破了5万台。与此同时,奇瑞还为购车用户准备了至高价值34000元的惊喜6重礼,包括至高15000元置换补贴、价值60…...

Java基础学习:深入解析Java中的位运算符

在Java中&#xff0c;位运算符用于对整数类型的值进行位运算。以下是Java中的位运算符&#xff1a; 位与(&)&#xff1a;两位都为1时&#xff0c;结果为1&#xff0c;否则为0。 位或(|)&#xff1a;两位中有1个为1&#xff0c;结果为1。 位非(~)&#xff1a;位的反&#…...

酒店提前线上订房小程序源码系统 PHP+MySQL组合开发 源码开源可二开 带完整的安装代码包以及搭建教程

系统概述 随着移动互联网的普及&#xff0c;越来越多的人习惯通过手机进行酒店预订。传统的线下订房方式逐渐无法满足用户的需求&#xff0c;酒店提前线上订房小程序的出现成为必然趋势。该源码系统的开发旨在为酒店提供一个便捷、高效的线上订房平台&#xff0c;提升用户体验…...

Python深度学习:【模型系列】一文搞懂Transformer架构的三种注意力机制

文章目录 1. 什么是注意力机制?2. Transformer 的注意力层2.1 注意力机制基础2.2 理解Q,K,V2.3 交叉注意力层2.4 全局自注意力层2.5 因果注意力层3. 位置编码4. 多头注意力机制5. 总结1. 什么是注意力机制? 注意力机制最初受到人类视觉注意力的启发,目的是让模型在处理大…...

【MySQL精通之路】全文搜索(5)-限制

主博客&#xff1a;【MySQL精通之路】全文搜索功能-CSDN博客 全文搜索仅支持InnoDB和MyISAM表。 分区表不支持全文搜索。参见“分区的限制和限制”。 全文搜索可用于大多数多字节字符集。 例外的是&#xff0c;对于Unicode&#xff0c;可以使用utf8mb3或utf8mb4字符集&#xff…...