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

机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT

大多数优化算法可以分解为三个主要部分:

  1. 模型函数:如何组合特征进行预测(如线性加法)

  2. 损失函数:衡量预测与真实值的差距(如交叉熵、平方损失)

  3. 优化方法:如何最小化损失函数(如梯度下降、前向分步)

我们来学习一下这些部分,以此作为基础去进一步理解要讲的优化算法。我们这节要讲的优化算法要套用这三个模版。以后的所有的算法都逃不过这三大步骤

1.模型函数,我们这里已经学过逻辑回归,决策树,一会还有要讲的集成学习模型。

2.损失函数 ,损失函数(Loss Function)是机器学习的核心组件,它量化了模型预测与真实值之间的差异(就是第一部分和真实值的差距),为模型优化提供方向,以后去使用优化方法去不断优化这个函数(第三节介绍)

 还有其他损失函数,具体我们可以设置任何损失函数。我们看我们了解过的算法的损失函数:

2.1决策树的损失函数:

 我们构造决策树的时候要最优化以上的损失函数,因为这个损失函数很简单,我们只需要去遍历特征就可以得到最优的取值参数(分割点),所以并未涉及到算法。

2.2逻辑回归

3.优化方法(运筹里讲了很多,这里我们只介绍基于参数的梯度下降法,和基于函数的分布向前算法)

核心目标在于找到参数空间使得最小化损失函数。

算法流程:

梯度下降法前面优化逻辑回归的损失函数的时候讲过,它有很多变式,

分布向前下降,就是一步一步去优化损失,比如说当损失是MSE的时候,我每次去求一个基学习器让MSE最小,然后再去优化这个加法模型的参数,这个参数就是相当于学习率,基学习器相当于我们的方向(比如在以下的算法中是损失函数负梯度方向,而MSE的负梯度就是残差,所以让基学习器去拟合残差了。),这样一步一步的去求得一个最优的,分布向前算法就好像一个大的框架,你可以任意给定损失函数,然后每一步都去固定上一个最优的基学习器,去寻找当前步的最优参数和模型。

其实向前分布算法更像是一个框架,提供一种思路,其中具体如何优化损失函数会产生许多算法。

4. 提升树其实就是向前分布算法的一种实现特例,它要求学习器是一个决策树,并且权重一般都是1,而且损失函数一般对于回归问题是平方误差损失函数,对于分类问题,如果是二分类使用指数损失,对于多分类问题使用交叉熵,一般问题可以定义损失函数。

提升树也是一个框架,具体损失函数不同,对应算法不同。

5.Boosting集成学习 

Boosting 是一种集成学习技术,通过组合多个弱学习器来构建一个强学习器(本节讲的是加法模型),以提高模型的预测性能。以下从原理、常见算法、应用场景等方面对其进行介绍:

Boosting 的核心思想是迭代地训练一系列弱学习器,每个弱学习器都在上一个弱学习器的基础上进行改进。具体来说,在训练过程中,会为每个训练样本赋予一个权重,初始时所有样本的权重通常是相等的。然后,依次训练各个弱学习器,对于每个弱学习器,它会根据当前样本的权重分布来进行学习,更关注那些被之前的弱学习器错误分类的样本,即增加这些错误样本的权重,降低正确分类样本的权重。这样,后续的弱学习器就会更加注重纠正前面弱学习器的错误,从而逐步提升整个模型的性能。最后,将这些弱学习器按照一定的方式进行组合,通常是通过加权投票(分类问题)或加权平均(回归问题)等方法,得到最终的强学习器。

所以Boosting技术中最重要的是两个:如何提高错误数据的圈子,并且降低正确数据的权重;如何计算每个学习器的占比权重

 Bagging和Boosting的区别

 6.Adaboosting算法(解决分类问题)

有了以上基础,其实一句话就能说清楚Adaboosting算法是什么玩意:其实就是以线性加法为目标函数,以指数损失为损失函数,以向前分布算法为优化方法的一类算法。(如果我们要求基学习器是树的话,其实就是提升树的特殊情况了,但经典AdaBoost的基学习器一般是弱分类器(如决策树桩、单层决策树),而非任意树),我们先将他的流程,再将它的原理,再讲它是如何做到Boosting的(即如何体现重要的两个点)。

手写所有步骤:

 至此我们手写了该算法的构造原理,其中设计到许多求和号的转变。

6.3如何体现Boosting集成思想

首先,利用指数损失作为概率,很完美的实现了数据集的重新赋值。

其次,我们使用错误率构造了权重公式,显然,公式是一个减函数,即错误率越高权重越小

以上两点就是说明了Adaboosting算法的归属问题。

7.我们来看一些提升树的案例,以此引出GBDT(梯度下降提升树)

7.1二分类问题的提升树

二分类问题的预测函数是权值为1的分类决策树的组合,损失函数是指数损失(只要是指数损失,就可以通过损失来调整样本数据的权重),优化方法是分布向前方法,它相当于Adaboosting算法的特殊情况:就是权重为一并且基学习器是一个二分类树的特殊情况,它的算法流程很简单,就是Adaboosting算法,不需要求权重。

7.2回归问题的提升树

 知道,只要第m次回归树距离残差越小。损失函数就越小,所以在分布向前算法里,我们只需要去构造每一步的决策树去拟合残差(即使用残差去改变数据的权值)即可得到这一论的基学习器,然后一直循环下去,以下是算法流程:

以上两种以指数函数和平方误差为损失函数的很容易去进行优化,那么对于一般回归问题的的损失函数该如何去优化呢,这就是我们要讲的GBDT算法。

8.GBDT算法

接上表述GBDT核心在于提升树的损失函数不同,用于处理通用的损失函数问题,其他就是提升树的本质,那么思想是什么?

首先它的预测函数和回归提升树是一样的。即

他的损失函数是一般的损失函数,我们用L(y,f(x))表示 ,GBDT的核心目标是:确保每增加一个学习器,总损失不会增加,即第m步比第m-1步的总损失不大。所以GBDT本质上去优化的目标函数是:

我们进行一系列推导:

所以让我们每一步的回归决策树去拟合损失函数的负梯度即可(即使用负梯度去改变数据的权重值),所以又叫做梯度提升树。

于是有如下算法: 注意这里的初始化函数并不是0,而是先求得一个常数c,c使得总损失最小。(b)步骤就是我们以前讲过的回归决策树的构造,(c)步骤的意思就是在求解第m个决策树第j个节点上的回归值,是通过最小化损失函数计算得到的,观察那个式子,就是我们把在这个节点上的样本回归值都用c表示,c可以是得在这个节点上的总损失最小,那个fm-1(x)+c,就是表示我上一轮的值加上这个c与真实值的损失最小。不是我们之前讲的c是叶子结点的平均了,这个平均我们用于初始化了。

当给定一个数据的时候它的回归结果是这样的:

我们把这个通用的流程带入7.2以MSE为损失函数的提升树里,对应的是拟合该损失函数的负梯度方向,我们计算会发现这个负梯度带入后就是我们的残差。

注意:

GBDT(Gradient Boosting Decision Tree,梯度提升决策树)的基学习器通常是回归决策树,即使是在解决分类问题时也是如此。以下是详细解释:


1. GBDT 的基学习器:回归树

  • 回归问题
    直接使用回归树(CART 回归树)作为基学习器,每个叶结点输出一个连续值(即 cmjcmj​),最终预测值是所有树输出的累加。

  • 分类问题(就是我之前说的,逻辑回归其实就是回归+激活函数)

    • 二元分类:通过逻辑回归的链接函数(如 sigmoid)将累加结果映射为概率,但每棵树本身仍是回归树,拟合的是对数几率(log-odds)的梯度。

    • 多分类:采用类似逻辑回归的 Softmax 形式,但对每棵树的训练仍基于回归树拟合残差。

核心原因
梯度提升的每一步需要拟合的是连续值(负梯度/残差),而分类树的离散输出无法直接实现这一点。因此,回归树更通用。


2. 为什么用回归树而非分类树?

  • 梯度提升的本质
    通过加法模型逐步优化损失函数,每一步需要计算损失函数对当前模型的梯度(即伪残差 rmirmi​),而梯度是连续值,必须用回归树拟合。

  • 灵活性
    回归树可以输出任意连续值(如 cmjcmj​),能更精细地调整模型,而分类树只能输出离散类别。

  • 统一框架
    回归树可以同时处理回归和分类任务(通过调整损失函数),而分类树无法直接用于回归。

GBDT可以用来分类,只要把回归结果转化一下就行,也可以回归问题,但是Adaboosting只能用于二分类问题,它其实就是二分类提升树的一个推广

相关文章:

机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT

大多数优化算法可以分解为三个主要部分: 模型函数:如何组合特征进行预测(如线性加法) 损失函数:衡量预测与真实值的差距(如交叉熵、平方损失) 优化方法:如何最小化损失函数&#x…...

Floyd算法求解最短路径问题——从零开始的图论讲解(3)

目录 前言 Djikstra算法的缺陷 为什么无法解决负权图 模拟流程 什么是Floyd算法 Floyd算法的核心思想 状态表示 状态转移方程 边界设置 代码实现 逻辑解释 举例说明 Floyd算法的特点 结尾 前言 这是笔者图论系列的第三篇博客 第一篇: 图的概念,图的存储,图的…...

spark和hadoop的区别与联系

区别 1. 数据处理模型 Hadoop:主要依赖 MapReduce 模型,计算分 Map(映射)和 Reduce(归约)两个阶段,中间结果常需写入磁盘,磁盘 I/O 操作频繁,数据处理速度相对受限&#…...

XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘

# 详细点: XML 被设计为传输和存储数据, XML 文档结构包括 XML 声明、 DTD 文档类型定义(可 选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的 信息传输…...

C# .NET如何自动实现依赖注入(DI)

为解决重复性的工作&#xff0c;自动实现依赖注入&#xff08;DI&#xff09; 示例代码如下 namespace DialysisSOPSystem.Infrastructure {public static class ServiceCollectionExtensions{/// <summary>/// 批量注入服务/// </summary>/// <param name&qu…...

FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南

本文参考&#xff1a;https://doc.tryfastgpt.ai/docs/development/ 一、背景与技术优势 FastGPT是基于LLM的知识库问答系统&#xff0c;支持自定义数据训练与多模型接入。硅基流动&#xff08;SiliconFlow&#xff09;作为AI基础设施平台&#xff0c;提供高性能大模型推理引…...

AI对话高效输入指令攻略(三):使用大忌——“AI味”

免责声明&#xff1a; 1.本文所提供的所有 AI 使用示例及提示词&#xff0c;仅用于学术写作技巧交流与 AI 功能探索测试&#xff0c;无任何唆使或鼓励利用 AI 抄袭作业、学术造假的意图。 2.文章中提及的内容旨在帮助读者提升与 AI 交互的能力&#xff0c;合理运用 AI 辅助学…...

算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 成长优化算法 一、算法原理二、核心公式三、应用领域四、算法改进研究五…...

生产环境问题排查:日志分析与性能瓶颈定位(一)

引言 在当今数字化时代&#xff0c;各类应用系统如潮水般涌现&#xff0c;支撑着我们生活和工作的方方面面。从日常使用的电商平台、社交网络&#xff0c;到企业内部复杂的业务系统&#xff0c;它们的稳定运行和高效性能至关重要。而在生产环境中&#xff0c;日志分析与性能瓶…...

go语言的八股文

1.go语言触发异常的场景有哪些 运行时错误 1.空指针解引用&#xff1a;尝试访问一个未初始化的指针指向的内存&#xff0c;会导致程序崩溃并触发异常。 2.数组越界访问&#xff1a;试图访问数组中不存在的索引&#xff0c;比如数组长度为5&#xff0c;却尝试访问索引为10的元素…...

Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取

关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式&#xff1a; …...

组态软件工业化自动领域的可视化配置利器

组态软件是工业自动化领域的可视化配置利器&#xff0c;在工业生产中发挥着至关重要的作用&#xff0c;以下从定义、特点、功能、应用场景、市场现状及发展趋势等方面进行详细介绍&#xff1a; 定义 组态软件&#xff0c;又称组态监控系统软件&#xff0c;是用于数据采集和过程…...

Ansys electronics安装多版本simulink打开s-function冲突解决方法

安装了Ansys Electronics 2022 R1和2024 R1&#xff0c;想通过simplorer和simulink中的S-function进行联合仿真&#xff0c;结果注册表一直是2024 R1&#xff0c;修改方法如下&#xff1a; 1. WINR打开cmd&#xff0c;注意要用管理员权限打开 2. 输入 "D:\ANSYS\AnsysE…...

ubuntu--安装双系统

教程 BIOS设置 启动盘生成和ubuntu安装 boot option #1设置USB为第一启动项 rufus下载 官网&#xff1a; 链接 点击“链接”下面的按钮&#xff0c;即可下载。(注意查看自己的电脑是x64还是x84) 网盘下载&#xff1a; 链接...

快速搭建 Cpolar 内网穿透(Mac 系统)

1、Cpolar快速入门教程&#xff08;官方&#xff09; 链接地址&#xff1a;Cpolar 快速入门 2、官方教程详解 本地安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这个是从 git 上拉取的&#x…...

【pytorch】torch.nn.Unfold操作

说明 一个代码里涉及到了unfold的操作&#xff0c;看了半天官网都没整明白维度怎么变化的&#xff0c;参考这个链接搞明白了&#xff1a; https://blog.csdn.net/ViatorSun/article/details/119940759 https://zhuanlan.zhihu.com/p/361140988 维度计算 输入&#xff08; N,…...

使用PyTorch实现图像增广与模型训练实战

本文通过完整代码示例演示如何利用PyTorch和torchvision实现常用图像增广方法&#xff0c;并在CIFAR-10数据集上训练ResNet-18模型。我们将从基础图像变换到复杂数据增强策略逐步讲解&#xff0c;最终实现一个完整的训练流程。 一、图像增广基础操作 1.1 准备工作 #matplotli…...

PyTorch实现糖尿病预测的CNN模型:从数据加载到模型部署全解析【N折交叉验证、文末免费下载】

本文将详细介绍如何使用PyTorch框架构建一个卷积神经网络(CNN)来预测糖尿病&#xff0c;包含完整的代码实现、技术细节和可视化分析。 1. 项目概述 本项目使用经典的Pima Indians Diabetes数据集&#xff0c;通过5折交叉验证训练一个1D CNN模型&#xff0c;最终实现糖尿病预测…...

红队专题-漏洞挖掘-代码审计-反序列化

漏洞挖掘-代码审计-反序列化 加固/防御命令执行相关日志Tools-JNDIExploitJNDI Java Naming and Directory Interface Java命名目录接口注入原理payload参数渗透测试-php命令执行-RCE+Struts2拿webshell普通权限 命令执行 拿 webshellCMD echo 写入一句话 php文件菜刀连接Strut…...

【2025软考高级架构师】——计算机系统基础(7)

摘要 本文主要介绍了计算机系统的组成&#xff0c;包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成&#xff0c;软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构&#xff0c;包括 CPU、主存储器、外存等&#xff0c;并解…...

【网络原理】TCP协议如何实现可靠传输(确认应答和超时重传机制)

目录 一. TCP协议 二. 确定应答 三. 超时重传 一. TCP协议 1&#xff09;端口号 源端口号&#xff1a;发送方端口号目的端口号&#xff1a;接收方端口号 16位&#xff08;2字节&#xff09;端口号&#xff0c;可以表示的范围&#xff08;0~65535&#xff09; 源端口和目的…...

Java synchroinzed和ReentrantLock

synchronized —— JVM亲儿子的暗黑兵法 核心思想&#xff1a;“锁即对象&#xff0c;对象即锁&#xff01;” 底层三板斧 对象头里的锁密码 每个Java对象头里藏了两个骚东西&#xff1a; Mark Word&#xff1a;32/64位的比特修罗场&#xff0c;存哈希码、GC年龄&#xff0…...

【Linux】vim配置----超详细

目录 一、插件管理器准备 二、目录准备 三、安装插件 一、插件管理器准备 Vim-plug 是一个Vim插件管理器&#xff0c;利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单&#xff0c;而且在操作过程中会给出很多易读的反馈信息&#xff0c;是一个自由、…...

驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析

在嵌入式系统中&#xff0c;电源管理&#xff08;Power Management&#xff09;并不是“可选项”&#xff0c;而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础&#xff0c;从理论结构、内核架构&#xff0c;再到典型驱动实战&a…...

如何使用人工智能大模型,免费快速写工作计划?

如何使用人工智能大模型&#xff0c;免费快速写工作计划&#xff1f; 具体视频教程https://edu.csdn.net/learn/40406/666579...

延长(暂停)Windows更新

延长&#xff08;暂停&#xff09;Windows更新 因为不关闭更新有时候就会出现驱动或者软硬件不兼容&#xff0c;导致蓝屏出现。 注&#xff1a;为什么选择延长更新而不是用软件暂停更新&#xff0c;因为使用软件暂停更新会出现一下问题&#xff0c;比如微软商店打不开等等 键…...

QT实现串口透传的功能

在一些产品的开发的时候&#xff0c;需要将一个串口的数据发送给另外一个串口进行转发。 具体的代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Ma…...

分布类相关的可视化图像

目录 一、直方图&#xff08;Histogram&#xff09; 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 二、密度图&#xff08;Density Plot&#xff09; 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 三、箱线图&#xff08;Box Plo…...

【android bluetooth 框架分析 02】【Module详解 12】【 BidiQueue、BidiQueueEnd、Queue介绍】

1. BidiQueue 和 BidiQueueEnd 蓝牙协议栈里面有很多 BidiQueue ,本节就专门来梳理这块内容。 2. BidiQueue 介绍 BidiQueue&#xff0c;是 Host 与 Controller 层通信的中枢之一&#xff0c; acl_queue_、sco_queue_、iso_queue_ 都是 BidiQueue 类型。让我们一起看一下这个…...

c++通讯录管理系统

通讯录是一个可以记录亲人&#xff0c;好友的信息工具。 功能包括&#xff1a; 1&#xff0c;添加联系人&#xff1a;向通讯录添加新人&#xff0c;包括&#xff08;姓名&#xff0c;性别年龄&#xff0c;联系电话&#xff0c;家庭住址&#xff09; 2&#xff0c;显示联系人…...

React 打包

路由懒加载 原本的加载方式 #使用lazy()函数声明的路由页面 使用Suspense组件进行加载 使用CDN优化...

day1 python训练营

变量与输出 print(1,2,3,sep\n,endsep用来区分两个变量&#xff0c;end会紧跟最后一个变量) print(1,2,3,sepaaa,endsep用来区分两个变量,3后面不会再输出aaa) 格式化字符串 变量名值 print(f"变量名{变量名}") 变量的基础运算 ,-*,/ 注意*不要忘写。比如2j就不…...

C语言状态字与库函数详解:概念辨析与应用实践

C语言状态字与库函数详解&#xff1a;概念辨析与应用实践 一、状态字与库函数的核心概念区分 在C语言系统编程中&#xff0c;"状态字"和"库函数"是两个经常被混淆但本质完全不同的概念&#xff0c;理解它们的区别是掌握系统编程的基础。 1. 状态字&…...

软件测试笔记(测试的概念、测试和开发模型介绍、BUG介绍)

软件测试笔记 认识测试 软件测试是啥&#xff1f; 说白了&#xff0c;就是检查软件的功能和效果是不是用户真正想要的东西。比如用户说“我要一个能自动算账的软件”&#xff0c;测试就是看这个软件到底能不能准确算账、有没有漏掉功能。 软件测试定义&#xff1a;软件测试就…...

Python多进程同步全解析:从竞争条件到锁、信号量的实战应用

1. 进程同步的必要性 在多进程编程中&#xff0c;当多个进程需要访问共享资源时&#xff0c;会出现竞争条件问题。例如火车票售卖系统中&#xff0c;如果多个售票窗口同时读取和修改剩余票数&#xff0c;可能导致数据不一致。 1.1 竞争条件示例 from multiprocessing import…...

Vue3 + TypeScript,关于item[key]的报错处理方法

处理方法1&#xff1a;// ts-ignore 注释忽略报错 处理方法2&#xff1a;item 设置为 any 类型...

Spring源码中关于抽象方法且是个空实现这样设计的思考

Spring源码抽象方法且空实现设计思想 在Spring源码中onRefresh()就是一个抽象方法且空实现&#xff0c;而refreshBeanFactory()方法就是一个抽象方法。 那么Spring源码中onRefresh方法定义了一个抽象方法且是个空实现&#xff0c;为什么这样设置&#xff0c;好处是什么。为…...

Pandas数据可视化

在当今这个数据驱动的时代&#xff0c;数据可视化已经成为数据分析不可或缺的一部分。通过图形化的方式展示数据&#xff0c;我们能够更直观地理解数据的分布、趋势和关系&#xff0c;从而做出更加精准的决策。Pandas&#xff0c;作为Python中最为流行的数据处理库&#xff0c;…...

string类(详解)

【本节目标】 1. 为什么要学习string类 2. 标准库中的string类 3. string类的模拟实现 4. 扩展阅读 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 C 语言中&#xff0c;字符串是以 \0 结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c; C 标准库中提供…...

零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!

写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…...

【上位机——MFC】MFC入门

MFC库中相关类简介 CObject MFC类库中绝大部分类的父类&#xff0c;提供了MFC类库中一些基本的机制。 对运行时类信息的支持。对动态创建的支持。对序列化的支持。 CWinApp 应用程序类&#xff0c;封装了应用程序、线程等信息。 CDocument 文档类&#xff0c;管理数据 F…...

ASP.NET Core 最小 API:极简开发,高效构建(下)

在上篇文章 ASP.NET Core 最小 API&#xff1a;极简开发&#xff0c;高效构建&#xff08;上&#xff09; 中我们添加了 API 代码并且测试&#xff0c;本篇继续补充相关内容。 一、使用 MapGroup API 示例应用代码每次设置终结点时都会重复 todoitems URL 前缀。 API 通常具有…...

【leetcode100】一和零

1、题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 输入&#xff1a…...

代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长

105.有向图的完全可达性 题目链接&#xff1a;101. 孤岛的总面积 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;图论&#xff1a;岛屿问题再出新花样 | 深搜优先搜索 | 卡码网&#xff1a;101.孤岛总面积_哔哩哔哩_bilibili 思路&#xff1a; 1.确认递归函数&…...

在 Debian 10.x 安装和配置 Samba

1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置&#xff08;共享目录&#xff09; …...

Python中的短路运算

近期在学习python的过程中遇到此问题&#xff0c;遂总结记录 在”and“逻辑判定布尔类型时: 若判定对象均为True&#xff0c;则输出最后一个判别为True的对象 若判定对象的数据类型中有布尔类型&#xff0c;且最终结果为False&#xff0c;则输出布尔类型False 若判定对象的…...

Java8-遍历list取出两个字段重新组成list集合

在Java 8中,可以使用Stream API遍历List并提取两个字段重新组合成新的List。 以下是几种常见方法: 方法1:使用自定义类 定义一个包含目标字段的类:public class FieldHolder {private final String field1;private final int field2;public FieldHolder(String field1, i…...

【C++ 程序设计】实战:C++ 实践练习题(31~40)

目录 31. 数列&#xff1a;s 1 &#xff0b; 2 &#xff0b; 3 &#xff0b; … &#xff0b; n 32. 数列&#xff1a;s 1 - 2 - 3 - … - n 33. 数列&#xff1a;s 1 &#xff0b; 2 - 3 &#xff0b; … - n 34. 数列&#xff1a;s 1 - 2 &#xff0b; 3 - … &#…...

【笔记】SpringBoot实现图片上传和获取图片接口

上传图片接口 接口接收图片文件和布尔类型的是否生成缩略图参数。 生成保存图片文件的文件夹&#xff0c;文件夹的命名为上传图片的日期“根目录\file\cover\202504”,如果文件夹已存在则不生成。接下来拼接文件名&#xff0c;生成30位的随机数拼接到原文件名防止文件名相同的…...

Linux 下依赖库的问题

假设你在 某用户 user_name 下安装了一个 rquests库。 然后你在命令行使用 python3 -c &#xff08;...&#xff09;验证。发现没有任何问题。 然后你使用python3 xxx.py 发现执行验证也没有问题。 这个时候你信心慢慢的写了一个C的代码在代码中system调用这个.py文件。 然…...